Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

SYSDATETIME() vs. GETDATE() in SQL Server:Was ist der Unterschied?

SQL Server verfügt über eine Reihe von Funktionen, die das aktuelle Datum/die aktuelle Uhrzeit zurückgeben. Zwei davon sind GETDATE() und SYSDATETIME() Funktionen.

Auf den ersten Blick scheinen diese beiden Funktionen dasselbe zu tun – das aktuelle Datum und die aktuelle Uhrzeit vom Betriebssystem des Computers abzurufen, auf dem die Instanz von SQL Server ausgeführt wird.

Es gibt jedoch einen feinen Unterschied zwischen den beiden.

Der Unterschied? Der Rückgabewerttyp

Der Hauptunterschied zwischen GETDATE() und SYSDATETIME() ist im Rückgabewerttyp.

  • GETDATE() gibt eine datetime zurück Wert.
  • SYSDATETIME() gibt ein datetime2(7) zurück Wert.

Das bedeutet, dass SYSDATETIME() hat mehr Sekundenbruchteilgenauigkeit als GETDATE() .

Beide Funktionen erhalten das aktuelle Datum und die Uhrzeit vom Betriebssystem des Computers, auf dem die Instanz von SQL Server ausgeführt wird, aber die gebrochene Genauigkeit ist unterschiedlich.

Beispiel

Hier ist ein Beispiel, um die unterschiedlichen Werte zu demonstrieren, die für jede Funktion zurückgegeben werden:

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

Ergebnis:

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

Also wie erwähnt, SYSDATETIME() , die ein datetime2(7) zurückgibt Wert, hat eine größere gebrochene Genauigkeit als  GETDATE() , die eine datetime zurückgibt Wert.

Die datetime2 Der Datentyp hat auch einen größeren Datumsbereich und eine optionale benutzerdefinierte Genauigkeit.

Welche sollte ich verwenden?

Microsoft empfiehlt die Verwendung von datetime2 mit unseren Datums-/Uhrzeitwerten. Dieser Datentyp entspricht dem SQL-Standard und ist besser portierbar als datetime .

Verwenden Sie daher SYSDATETIME() es sei denn, Sie haben einen Grund, dies nicht zu tun.