V MariaDB, SYSDATE()
je vestavěná funkce data a času, která vrací aktuální datum a čas.
Vrací čas, kdy byla funkce provedena (který se může lišit od času provedení příkazu).
Vrácená hodnota je vrácena v 'YYYY-MM-DD HH:MM:SS'
nebo YYYYMMDDHHMMSS.uuuuuu
formát, v závislosti na tom, zda je funkce použita v řetězcovém nebo číselném kontextu.
Vrácená hodnota je vyjádřena v aktuálním časovém pásmu.
Máte také možnost zadat přesnost na mikrosekundy.
Syntaxe
Syntaxe vypadá takto:
SYSDATE([precision])
Kde precision
je volitelný argument, který určuje přesnost na mikrosekundy.
Příklad
Zde je příklad:
SELECT SYSDATE();
Výsledek:
+---------------------+ | SYSDATE() | +---------------------+ | 2021-05-27 08:40:41 | +---------------------+
Číselný kontext
Když SYSDATE()
se používá v číselném kontextu, výsledek je v YYYYMMDDHHMMSS.uuuuuu
formát.
Příklad:
SELECT
SYSDATE(),
SYSDATE() + 0;
Výsledek:
+---------------------+----------------+ | SYSDATE() | SYSDATE() + 0 | +---------------------+----------------+ | 2021-05-27 08:41:19 | 20210527084119 | +---------------------+----------------+
Přesnost
Zde je příklad zadání přesnosti na mikrosekundy:
SELECT
SYSDATE(6),
SYSDATE(6) + 0;
Výsledek:
+----------------------------+-----------------------+ | SYSDATE(6) | SYSDATE(6) + 0 | +----------------------------+-----------------------+ | 2021-05-27 08:41:44.561665 | 20210527084144.562263 | +----------------------------+-----------------------+
Maximální hodnota pro přesnost na mikrosekundy je 6. Co se stane, když je pro přesnost předáno vyšší číslo:
SELECT SYSDATE(12);
Výsledek:
ERROR 1426 (42000): Too big precision 12 specified for 'sysdate'. Maximum is 6
SYSDATE()
vs NOW()
Ačkoli SYSDATE()
je podobný NOW()
funkce, existují rozdíly.
Jedním z hlavních rozdílů je, že SYSDATE()
vrátí čas, kdy se provede, zatímco NOW()
vrátí čas, kdy se příkaz začal provádět. Při spuštění v rámci uložené procedury nebo spouštěče NOW()
vrátí čas, kdy se uložená procedura nebo spouštěč začaly provádět.
Zde je příklad, který tento rozdíl demonstruje:
SELECT
NOW(),
SYSDATE(),
SLEEP(5),
NOW(),
SYSDATE();
Výsledek (při použití vertikálního výstupu):
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
V tomto případě jsme použili SLEEP()
funkce pozastaví zpracování na pět sekund před druhou řadou volání funkcí.
Vidíme, že podruhé SYSDATE()
byl vyvolán, jeho návratová hodnota byla jiná než poprvé. NOW()
na druhé straně vrátil stejnou hodnotu v obou případech.
Při používání SYSDATE()
je třeba mít na paměti několik dalších věcí . Například SET TIMESTAMP
na to nemá vliv (zatímco má ovlivnit NOW()
funkce). Také SYSDATE()
není bezpečné pro replikaci, pokud se používá binární protokolování založené na příkazech. V případě potřeby však existují způsoby, jak se s tím vypořádat. Další informace naleznete v dokumentaci MariaDB.