Mysql
 sql >> база данни >  >> RDS >> Mysql

SYSDATE() срещу NOW() в MySQL:Каква е разликата?

Когато връщате текущата дата/час в MySQL, има набор от функции, от които можете да избирате. Повечето от тях са просто синоними на друга функция.

Има обаче две функции, които изглежда правят едно и също нещо, но всъщност са малко по-различни. Функциите, за които имам предвид, са SYSDATE() и NOW() .

Разликата между SYSDATE() и NOW()

И двете функции връщат текущата дата и час. Ето къде обаче те се различават:

  • SYSDATE() връща времето, в което се изпълнява.
  • NOW() връща постоянно време, което указва времето, в което изявлението започна да се изпълнява.
  • SET TIMESTAMP оператор засяга стойността, върната от NOW() но не и от SYSDATE() .

Така че в много случаи вероятно ще получите същия резултат, независимо коя функция използвате. Ако обаче изявлението ви е по-сложно и отнема известно време, за да се изпълни, може да получите доста голяма разлика в връщаната стойност в зависимост от това коя функция използвате.

Пример

Ето пример, за да демонстрирате как връщаната стойност може да варира в зависимост от това коя функция използвате.

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

Резултат:

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

Така че в този пример изпълнявам SYSDATE() два пъти, но с пауза от 10 секунди между тях. След това правя същото с NOW() .

Както се очакваше, 10-секундната пауза засяга връщаната стойност на втория SYSDATE() но не и вторият NOW() . Всъщност стойностите и за двата екземпляра на NOW() са същите като за първия екземпляр на SYSDATE() , когато изявлението започна да се изпълнява.

Превръщане на SYSDATE() в псевдоним за NOW()

Ако разликата между тези две функции ви създава проблеми, всъщност имате възможност да направите SYSDATE() псевдоним за NOW() .

За да направите това, използвайте --sysdate-is-now опция за сървърна команда. За повече информация вижте –sysdate-is-now на уебсайта за документация на MySQL.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Ъгъл на базата данни:Ръководство за начинаещи за системите за съхранение на Mysql

  2. Какъв е най-добрият начин за мигриране на Django DB от SQLite към MySQL?

  3. MySql таблица Вмъкнете, ако не съществува, в противен случай актуализирайте

  4. MySQL Alter Stored Procedure

  5. Как извличате числова стойност от низ в MySQL заявка?