sql >> Database >  >> RDS >> Sqlserver

SYSDATETIME() vs GETDATE() in SQL Server:wat is het verschil?

SQL Server heeft een aantal functies die de huidige datum/tijd retourneren. Twee hiervan zijn de GETDATE() en SYSDATETIME() functies.

Op het eerste gezicht lijken deze twee functies hetzelfde te doen:de huidige datum en tijd ophalen van het besturingssysteem van de computer waarop de instantie van SQL Server wordt uitgevoerd.

Er is echter een subtiel verschil tussen de twee.

Het verschil? Het retourwaardetype

Het belangrijkste verschil tussen GETDATE() en SYSDATETIME() is in het retourwaardetype.

  • GETDATE() retourneert een datetime waarde.
  • SYSDATETIME() retourneert een datetime2(7) waarde.

Dit betekent dat SYSDATETIME() heeft meer fractionele seconden precisie dan GETDATE() .

Beide functies halen de huidige datum en tijd op van het besturingssysteem van de computer waarop de instantie van SQL Server draait, maar de fractionele precisie is anders.

Voorbeeld

Hier is een voorbeeld om de verschillende waarden te demonstreren die voor elke functie worden geretourneerd:

SELECT 
    GETDATE() AS GETDATE,
    SYSDATETIME() AS SYSDATETIME;

Resultaat:

+-------------------------+-----------------------------+
| GETDATE                 | SYSDATETIME                 |
|-------------------------+-----------------------------|
| 2018-06-13 02:48:27.653 | 2018-06-13 02:48:27.6542371 |
+-------------------------+-----------------------------+

Dus zoals vermeld, SYSDATETIME() , die een datetime2(7) . retourneert waarde, heeft een grotere fractionele precisie dan  GETDATE() , die een datetime . retourneert waarde.

De datetime2 gegevenstype heeft ook een groter datumbereik en optionele door de gebruiker gespecificeerde precisie.

Welke moet ik gebruiken?

Microsoft raadt aan om datetime2 . te gebruiken met onze datum/tijd waarden. Dit gegevenstype komt overeen met de SQL-standaard en is beter overdraagbaar dan datetime .

Gebruik daarom SYSDATETIME() tenzij je een reden hebt om dat niet te doen.


  1. hasMany heeft gebeld met iets dat geen instantie is van Sequelize.Model

  2. LEAST() Functie in Oracle

  3. SQLite TUSSEN

  4. Hoe "MySQL ERROR 1819 (HY000):" op te lossen in Linux