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

SQL:utilizzo di DATAADD con bigint

Basta fare il problematico DATEADD in due fasi, partendo da un'unità di tempo più grossolana (secondi, minuti, ore ecc.), per poi tornare a quella a grana fine per il resto.

Evita di passare al livello di settimane e mesi, poiché ciò richiederebbe calcoli di calendario effettivi e preferiremmo che il sistema gestisse questo.

L'esempio seguente deve calcolare un'ora di inizio data una (possibilmente) durata della corrente elevata in millisecondi.

-- large durations can overflow the integer argument needed for DATEADD

-- so do as two steps subtracting minutes (60000ms) and then remaining milliseconds.

DATEADD(ms, -large_duration_ms%60000, DATEADD(minute, -large_duration_ms/60000, GETDATE()))