In SQL Server 2008 gibt es das date
Datentyp, der keine Zeit hat. Sie können also ganz einfach den Zeitanteil entfernen, indem Sie einfach umwandeln und dann DateAdd
ausführen .
SELECT DateAdd(month, -1, Convert(date, GetDate()));
Dies gibt ein date
zurück Datentyp. Um datetime
zu erzwingen Auch hier können Sie einfach ein weiteres Convert
hinzufügen :
SELECT Convert(datetime, DateAdd(month, -1, Convert(date, GetDate())));
Möglicherweise benötigen Sie die explizite Konvertierung in datetime
nicht , obwohl.
Hinweis:„Heute vor einem Monat“ kann auf viele verschiedene Arten definiert werden. Die Art und Weise, wie es in SQL Server funktioniert, besteht darin, den Tag aus dem vorherigen Monat zurückzugeben, der der gleichen Tageszahl wie der aktuelle Monat am nächsten kommt. Das bedeutet, dass das Ergebnis dieses Ausdrucks, wenn er am 31. März ausgeführt wird, der 28. Februar ist. Daher erhalten Sie in bestimmten Szenarien möglicherweise nicht die erwarteten Ergebnisse, wenn Sie nicht klar über die Auswirkungen nachdenken, z. Monatsberechnung mehrmals, in der Erwartung, denselben Tag in einem anderen Monat zu erhalten (z. B. März -> Februar -> Januar).
Sehen Sie sich eine Live-Demo bei SQL Fiddle an
Die Demo zeigt die Werte und resultierenden Datentypen jedes Ausdrucks.