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.