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

Como obter um mês atrás a partir de hoje no SQL Server 2008?


No SQL Server 2008 existe a date tipo de dados, que não tem hora anexada. Assim, você pode remover a parte do tempo facilmente simplesmente convertendo e executando o DateAdd .
SELECT DateAdd(month, -1, Convert(date, GetDate()));

Isso retornará uma date tipo de dados. Para forçá-lo a ser datetime novamente, você pode simplesmente adicionar mais um Convert :
SELECT Convert(datetime, DateAdd(month, -1, Convert(date, GetDate())));

Você pode não precisar da conversão explícita para datetime , no entanto.

Nota:"Há um mês a partir de hoje" pode ser definido de muitas maneiras diferentes. A maneira como funciona no SQL Server é retornar o dia do mês anterior mais próximo do mesmo número do dia do mês atual. Isso significa que o resultado dessa expressão quando executado em 31 de março será 28 de fevereiro. Portanto, você pode não obter os resultados esperados em determinados cenários se não pensar claramente sobre as ramificações disso, como se você executasse o one- cálculo do mês várias vezes, esperando obter o mesmo dia em um mês diferente (como março -> fevereiro -> janeiro).

Veja uma demonstração ao vivo no SQL Fiddle


A demonstração mostra os valores e os tipos de dados resultantes de cada expressão.