Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Wie kommt man in SQL Server 2008 von heute vor einem Monat?

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.