sql >> Database >  >> RDS >> Sqlserver

Hoe krijg ik een maand geleden vanaf vandaag in SQL Server 2008?

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.



  1. Garandeert SQL Server sequentiële invoeging van een identiteitskolom?

  2. Selecteer Top 10 records voor elke categorie in MySQL

  3. Volgende werkdag (maandag - vrijdag) in Oracle?

  4. Voer de opdracht Insert uit en retourneer de ingevoegde Id in Sql