Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

SYSDATE() vs NOW() no MySQL:Qual é a diferença?


Ao retornar a data/hora atual no MySQL, há uma variedade de funções que você pode escolher. A maioria destes são simplesmente sinônimos para outra função.

No entanto, existem duas funções que parecem fazer a mesma coisa, mas na verdade são um pouco diferentes. As funções a que me refiro são SYSDATE() e NOW() .


A diferença entre SYSDATE() e NOW()


Ambas as funções retornam a data e hora atuais. No entanto, aqui é onde eles diferem:
  • SYSDATE() retorna a hora em que é executado.
  • NOW() retorna uma hora constante que indica a hora em que a instrução começou a ser executado.
  • O SET TIMESTAMP declaração afeta o valor retornado por NOW() mas não por SYSDATE() .

Portanto, em muitos casos, você provavelmente obterá o mesmo resultado, independentemente de qual função usar. No entanto, se sua instrução for mais complexa e demorar um pouco para ser executada, você poderá acabar com uma grande diferença no valor de retorno, dependendo de qual função você usa.

Exemplo


Aqui está um exemplo para demonstrar como o valor de retorno pode variar, dependendo de qual função você usa.
SELECT
    SYSDATE(), SLEEP(10) AS '', SYSDATE(),
    NOW(), SLEEP(10) AS '', NOW();

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

Então, neste exemplo, eu executo SYSDATE() duas vezes, mas com uma pausa de 10 segundos no meio. Eu então faço a mesma coisa com NOW() .

Como esperado, a pausa de 10 segundos afeta o valor de retorno do segundo SYSDATE() mas não o segundo NOW() . Na verdade, os valores das duas instâncias de NOW() são os mesmos da primeira instância de SYSDATE() , que é quando a instrução começou a ser executada.

Tornando SYSDATE() um Alias ​​para NOW()


Se a diferença entre essas duas funções está causando problemas, você tem a opção de fazer SYSDATE() um alias para NOW() .

Para fazer isso, use o comando --sysdate-is-now opção de comando do servidor. Para obter mais informações, consulte –sysdate-is-now no site de documentação do MySQL.