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.