In SQL Server 2008 is er de date
gegevenstype, waaraan geen tijd is gekoppeld. U kunt het tijdsgedeelte dus vrij eenvoudig verwijderen door simpelweg te converteren en vervolgens de DateAdd
. uit te voeren .
SELECT DateAdd(month, -1, Convert(date, GetDate()));
Dit retourneert een date
data type. Om het te forceren om datetime
te zijn nogmaals, je kunt gewoon nog een Convert
. toevoegen :
SELECT Convert(datetime, DateAdd(month, -1, Convert(date, GetDate())));
Mogelijk hebt u de expliciete conversie naar datetime
niet nodig , hoewel.
Opmerking:"Een maand geleden vanaf vandaag" kan op veel verschillende manieren worden gedefinieerd. De manier waarop het in SQL-server werkt, is om de dag van de vorige maand te retourneren die het dichtst bij hetzelfde dagnummer ligt als de huidige maand. Dit betekent dat het resultaat van deze uitdrukking wanneer deze op 31 maart wordt uitgevoerd, 28 februari zal zijn. Het is dus mogelijk dat u in bepaalde scenario's niet de verwachte resultaten krijgt als u niet helder nadenkt over de gevolgen hiervan, bijvoorbeeld als u de ene- maandberekening meerdere keren, in de verwachting dezelfde dag in een andere maand te krijgen (zoals maart -> februari -> januari).
Bekijk een live demo op SQL Fiddle
De demo toont de waarden en resulterende datatypes van elke expressie.