sql >> Databáze >  >> RDS >> Mysql

SYSDATE() vs NOW() v MySQL:Jaký je rozdíl?

Při vracení aktuálního data/času v MySQL existuje řada funkcí, ze kterých si můžete vybrat. Většina z nich jsou prostě synonyma pro jinou funkci.

Existují však dvě funkce, které se zdají dělat totéž, ale ve skutečnosti se mírně liší. Funkce, na které odkazuji, jsou SYSDATE() a NOW() .

Rozdíl mezi SYSDATE() a NOW()

Obě funkce vrátí aktuální datum a čas. Zde se však liší:

  • SYSDATE() vrátí čas, kdy se spustí.
  • NOW() vrací konstantní čas, který udává čas, kdy příkaz začal popravovat.
  • SET TIMESTAMP má vliv na hodnotu vrácenou NOW() ale ne do SYSDATE() .

V mnoha případech tedy pravděpodobně získáte stejný výsledek bez ohledu na to, jakou funkci používáte. Pokud je však váš příkaz složitější a jeho spuštění chvíli trvá, můžete skončit s poměrně velkým rozdílem v návratové hodnotě v závislosti na tom, jakou funkci používáte.

Příklad

Zde je příklad demonstrující, jak se může vrácená hodnota lišit v závislosti na tom, jakou funkci používáte.

SELECT
    SYSDATE(), SLEEP(10) AS '', SYSDATE(),
    NOW(), SLEEP(10) AS '', NOW();

Výsledek:

+---------------------+---+---------------------+---------------------+---+---------------------+
| SYSDATE()           |   | SYSDATE()           | NOW()               |   | NOW()               |
+---------------------+---+---------------------+---------------------+---+---------------------+
| 2018-06-23 11:55:26 | 0 | 2018-06-23 11:55:36 | 2018-06-23 11:55:26 | 0 | 2018-06-23 11:55:26 |
+---------------------+---+---------------------+---------------------+---+---------------------+

V tomto příkladu tedy spustím SYSDATE() dvakrát, ale s 10 sekundovou pauzou mezi nimi. Potom udělám to samé s NOW() .

Podle očekávání ovlivní 10sekundová pauza návratovou hodnotu druhého SYSDATE() ale ne druhý NOW() . Ve skutečnosti hodnoty pro oba případy NOW() jsou stejné jako u první instance SYSDATE() , což je okamžik, kdy se příkaz spustil.

Provedení SYSDATE() jako alias pro NOW()

Pokud vám rozdíl mezi těmito dvěma funkcemi způsobuje problémy, máte ve skutečnosti možnost provést SYSDATE() alias pro NOW() .

Chcete-li to provést, použijte --sysdate-is-now možnost příkazu serveru. Další informace naleznete v tématu –sysdate-is-now na webu dokumentace MySQL.


  1. Pomocí sp_help_jobschedule v SQL Server

  2. Nahraďte jednoduché uvozovky v SQL Server

  3. Převeďte OracleParameter.Value na Int32

  4. Nahrazení NULL 0 v dotazu SQL serveru