Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

SQL:Usando DATEADD com bigints


Basta fazer o problemático DATEADD em duas etapas, começando com uma unidade de tempo mais grosseira (segundos, minutos, horas etc.), depois voltando para a de granulação fina para o restante.

Evite ir para o nível de semanas e meses, pois isso exigiria cálculos reais de calendário e preferiríamos que o sistema lidasse com isso.

O exemplo abaixo precisa calcular uma hora de início dada uma (possivelmente) grande duração de corrente em milissegundos.
-- 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()))