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.