sql >> Databasteknik >  >> RDS >> MariaDB

Hur SYSDATE() fungerar i MariaDB

I MariaDB, SYSDATE() är en inbyggd datum- och tidsfunktion som returnerar aktuellt datum och tid.

Den returnerar tiden då funktionen kördes (vilket kan skilja sig från tiden då satsen kördes).

Returvärdet returneras i 'YYYY-MM-DD HH:MM:SS' eller YYYYMMDDHHMMSS.uuuuuu format, beroende på om funktionen används i en sträng eller numerisk kontext.

Returvärdet uttrycks i den aktuella tidszonen.

Du har också möjlighet att ange mikrosekundprecisionen.

Syntax

Syntaxen ser ut så här:

SYSDATE([precision])

Där precision är ett valfritt argument som anger mikrosekundsprecisionen.

Exempel

Här är ett exempel:

SELECT SYSDATE();

Resultat:

+---------------------+
| SYSDATE()           |
+---------------------+
| 2021-05-27 08:40:41 |
+---------------------+

Numerisk kontext

När SYSDATE() används i ett numeriskt sammanhang, är resultatet i YYYYMMDDHHMMSS.uuuuuu format.

Exempel:

SELECT
    SYSDATE(),
    SYSDATE() + 0;

Resultat:

+---------------------+----------------+
| SYSDATE()           | SYSDATE() + 0  |
+---------------------+----------------+
| 2021-05-27 08:41:19 | 20210527084119 |
+---------------------+----------------+

Precision

Här är ett exempel på att specificera mikrosekundprecision:

SELECT
    SYSDATE(6),
    SYSDATE(6) + 0;

Resultat:

+----------------------------+-----------------------+
| SYSDATE(6)                 | SYSDATE(6) + 0        |
+----------------------------+-----------------------+
| 2021-05-27 08:41:44.561665 | 20210527084144.562263 |
+----------------------------+-----------------------+

Det maximala värdet för mikrosekundprecisionen är 6. Så här händer när en högre siffra passeras för precisionen:

SELECT SYSDATE(12);

Resultat:

ERROR 1426 (42000): Too big precision 12 specified for 'sysdate'. Maximum is 6

SYSDATE() kontra NOW()

Även om SYSDATE() liknar NOW() funktion, det finns skillnader.

En av de största skillnaderna är att SYSDATE() returnerar tiden som den körs, medan NOW() returnerar den tid då satsen började köras. När den körs inom en lagrad procedur eller trigger, NOW() kommer att returnera den tid som den lagrade proceduren eller triggern började exekvera.

Här är ett exempel som visar denna skillnad:

SELECT 
    NOW(),
    SYSDATE(),
    SLEEP(5),
    NOW(),
    SYSDATE();

Resultat (med vertikal utdata):

    NOW(): 2021-05-27 08:47:06
SYSDATE(): 2021-05-27 08:47:06
 SLEEP(5): 0
    NOW(): 2021-05-27 08:47:06
SYSDATE(): 2021-05-27 08:47:11

I det här fallet använde vi SLEEP() funktion för att pausa bearbetningen i fem sekunder innan den andra raden av funktionsanrop.

Vi kan se det andra gången SYSDATE() anropades var dess returvärde annorlunda än första gången. NOW() å andra sidan, returnerade samma värde båda gångerna.

Det finns några andra saker att tänka på när du använder SYSDATE() . Till exempel, SET TIMESTAMP påverkar det inte (medan det gör påverka NOW() fungera). Även SYSDATE() är osäker för replikering om satsbaserad binär loggning används. Det finns dock sätt att hantera detta om det behövs. Se MariaDB-dokumentationen för mer information.


  1. Web2py – Migrera från SQLite till MySQL

  2. Bästa motsvarigheten för IsInteger i SQL Server

  3. Serienummer per grupp av rader för sammansatt nyckel

  4. Oracle:hur är situationen att använda RAISE_APPLICATION_ERROR?