sql >> Base de Datos >  >> RDS >> Mysql

SYSDATE() vs NOW() en MySQL:¿Cuál es la diferencia?

Al devolver la fecha/hora actual en MySQL, hay una variedad de funciones entre las que puede elegir. La mayoría de estos son simplemente sinónimos de otra función.

Sin embargo, hay dos funciones que parecen hacer lo mismo, pero en realidad son ligeramente diferentes. Las funciones a las que me refiero son SYSDATE() y NOW() .

La diferencia entre SYSDATE() y NOW()

Ambas funciones devuelven la fecha y la hora actuales. Sin embargo, aquí es donde difieren:

  • SYSDATE() devuelve la hora a la que se ejecuta.
  • NOW() devuelve un tiempo constante que indica el momento en que la sentencia comenzó a ejecutar.
  • El SET TIMESTAMP La declaración afecta el valor devuelto por NOW() pero no por SYSDATE() .

Entonces, en muchos casos, probablemente obtendrá el mismo resultado independientemente de la función que use. Sin embargo, si su declaración es más compleja y tarda un tiempo en ejecutarse, podría terminar con una diferencia bastante grande en el valor devuelto según la función que use.

Ejemplo

Aquí hay un ejemplo para demostrar cómo el valor de retorno puede variar, dependiendo de la función que use.

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

Entonces, en este ejemplo, ejecuto SYSDATE() dos veces, pero con una pausa de 10 segundos en el medio. Luego hago lo mismo con NOW() .

Como era de esperar, la pausa de 10 segundos afecta el valor de retorno del segundo SYSDATE() pero no el segundo NOW() . De hecho, los valores de ambas instancias de NOW() son los mismos que para la primera instancia de SYSDATE() , que es cuando la instrucción comenzó a ejecutarse.

Convertir SYSDATE() en un alias para NOW()

Si la diferencia entre estas dos funciones le está causando problemas, en realidad tiene la opción de hacer SYSDATE() un alias para NOW() .

Para ello, utilice --sysdate-is-now opción de comando del servidor. Para obtener más información, consulte –sysdate-is-now en el sitio web de documentación de MySQL.