sql >> Databasteknik >  >> RDS >> Sqlserver

Hur får jag en månad sedan från idag i SQL Server 2008?

I SQL Server 2008 finns date datatyp, som inte har någon tid kopplad. Du kan alltså ta bort tidsdelen ganska enkelt genom att konvertera och sedan utföra DateAdd .

SELECT DateAdd(month, -1, Convert(date, GetDate()));

Detta returnerar ett date data typ. För att tvinga det att vara datetime igen, du kan helt enkelt lägga till en till Convert :

SELECT Convert(datetime, DateAdd(month, -1, Convert(date, GetDate())));

Du kanske inte behöver den explicita konverteringen till datetime dock.

Notera:"En månad sedan från idag" kan definieras på många olika sätt. Sättet det fungerar i SQL server är att returnera dagen från föregående månad som är närmast samma dagnummer som den aktuella månaden. Detta betyder att resultatet av detta uttryck när det körs den 31 mars kommer att bli 28 februari. Så du kanske inte får förväntade resultat i vissa scenarier om du inte tänker klart på konsekvenserna av detta, till exempel om du utförde en- månadsberäkning flera gånger, förväntar sig att få samma dag i en annan månad (som att göra mars -> februari -> januari).

Se en livedemo på SQL Fiddle

Demon visar värdena och resulterande datatyper för varje uttryck.



  1. Pandas to_sql misslyckas på duplicerad primärnyckel

  2. Vad betyder storleksbegränsning på MySQL-index?

  3. Fyll MySQL registrerar en-till-många relaterade tabeller i en åtgärd

  4. Postgresql:syntaxfel vid eller nära -