sql >> Database >  >> RDS >> Mysql

SYSDATE() vs NOW() in MySQL:wat is het verschil?

Bij het retourneren van de huidige datum/tijd in MySQL zijn er een aantal functies waaruit u kunt kiezen. De meeste hiervan zijn gewoon synoniemen voor een andere functie.

Er zijn echter twee functies die hetzelfde lijken te doen, maar in werkelijkheid iets anders zijn. De functies waar ik naar verwijs zijn SYSDATE() en NOW() .

Het verschil tussen SYSDATE() en NU()

Beide functies retourneren de huidige datum en tijd. Hier verschillen ze echter:

  • SYSDATE() geeft de tijd terug waarop het wordt uitgevoerd.
  • NOW() geeft een constante tijd terug die de tijd aangeeft waarop de instructie begon uit te voeren.
  • De SET TIMESTAMP statement beïnvloedt de waarde die wordt geretourneerd door NOW() maar niet door SYSDATE() .

Dus in veel gevallen krijgt u waarschijnlijk hetzelfde resultaat, ongeacht welke functie u gebruikt. Als uw instructie echter complexer is en enige tijd nodig heeft om te worden uitgevoerd, kunt u een behoorlijk groot verschil in de retourwaarde krijgen, afhankelijk van de functie die u gebruikt.

Voorbeeld

Hier is een voorbeeld om te laten zien hoe de geretourneerde waarde kan variëren, afhankelijk van de functie die u gebruikt.

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

Resultaat:

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

Dus in dit voorbeeld voer ik SYSDATE() . uit twee keer, maar met een pauze van 10 seconden ertussen. Ik doe dan hetzelfde met NOW() .

Zoals verwacht, beïnvloedt de pauze van 10 seconden de retourwaarde van de tweede SYSDATE() maar niet de tweede NOW() . In feite zijn de waarden voor beide instanties van NOW() zijn hetzelfde als voor de eerste instantie van SYSDATE() , toen de instructie begon te lopen.

SYSDATE() een alias maken voor NOW()

Als het verschil tussen deze twee functies je problemen geeft, heb je eigenlijk de mogelijkheid om SYSDATE() te maken een alias voor NOW() .

Gebruik hiervoor de --sysdate-is-now server opdracht optie. Zie –sysdate-is-now op de MySQL-documentatiewebsite voor meer informatie.


  1. Sqlite-database die een rij Android bijwerkt

  2. Hoe specificeer je de IN-component in een dynamische query met behulp van een variabele?

  3. Levenshtein:MySQL + PHP

  4. Modellering van een database voor het registreren van verkopen. Deel 1