Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

SYSDATETIME() vs GETDATE() in SQL Server:qual è la differenza?

SQL Server ha una serie di funzioni che restituiscono la data/ora corrente. Due di questi sono GETDATE() e SYSDATETIME() funzioni.

A prima vista, queste due funzioni sembrano fare la stessa cosa:ottenere la data e l'ora correnti dal sistema operativo del computer su cui è in esecuzione l'istanza di SQL Server.

Tuttavia, c'è una sottile differenza tra i due.

La differenza? Il tipo di valore restituito

La principale differenza tra GETDATE() e SYSDATETIME() è nel tipo di valore restituito.

  • GETDATE() restituisce un data/ora valore.
  • SYSDATETIME() restituisce un datetime2(7) valore.

Ciò significa che SYSDATETIME() ha una precisione di secondi frazionari superiore a GETDATE() .

Entrambe le funzioni ottengono la data e l'ora correnti dal sistema operativo del computer su cui è in esecuzione l'istanza di SQL Server, ma la precisione frazionaria è diversa.

Esempio

Ecco un esempio per dimostrare i diversi valori che vengono restituiti per ciascuna funzione:

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

Risultato:

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

Quindi, come accennato, SYSDATETIME() , che restituisce un datetime2(7) value, ha una precisione frazionaria maggiore di  GETDATE() , che restituisce un data/ora valore.

La dataora2 il tipo di dati ha anche un intervallo di date più ampio e una precisione specificata dall'utente facoltativa.

Quale dovrei usare?

Microsoft consiglia di utilizzare datetime2 con i nostri valori di data/ora. Questo tipo di dati è in linea con lo standard SQL ed è più portabile di datetime .

Pertanto, usa SYSDATETIME() a meno che tu non abbia motivo di non farlo.