sql >> Databáze >  >> RDS >> MariaDB

Jak funguje SYSDATE() v MariaDB

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 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.


  1. MySQL Select Date Equal to Today

  2. Exportujte data tabulky z jednoho SQL serveru do druhého

  3. Jak vybrat určitý počet znaků zleva nebo zprava od řetězce na serveru SQL

  4. Najděte délku nejdelšího řádku ve sloupci v oracle