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

Piso de uma data no servidor SQL


A chave é usar DATEADD e DATEDIFF junto com a enumeração de intervalo de tempo SQL apropriada.
declare @datetime datetime;
set @datetime = getdate();
select @datetime;
select dateadd(year,datediff(year,0,@datetime),0);
select dateadd(month,datediff(month,0,@datetime),0);
select dateadd(day,datediff(day,0,@datetime),0);
select dateadd(hour,datediff(hour,0,@datetime),0);
select dateadd(minute,datediff(minute,0,@datetime),0);
select dateadd(second,datediff(second,'2000-01-01',@datetime),'2000-01-01');
select dateadd(week,datediff(week,0,@datetime),-1); --Beginning of week is Sunday
select dateadd(week,datediff(week,0,@datetime),0); --Beginning of week is Monday

Observe que quando você está pavimentando a cada segundo, muitas vezes você obterá um estouro aritmético se usar 0. Portanto, escolha um valor conhecido que seja garantido como menor do que a data e hora que você está tentando fazer o piso.