sql >> Databasteknik >  >> RDS >> Sqlserver

Skapa ett datum från dag månad och år med T-SQL

Prova detta:

Declare @DayOfMonth TinyInt Set @DayOfMonth = 13
Declare @Month TinyInt Set @Month = 6
Declare @Year Integer Set @Year = 2006
-- ------------------------------------
Select DateAdd(day, @DayOfMonth - 1, 
          DateAdd(month, @Month - 1, 
              DateAdd(Year, @Year-1900, 0)))

Det fungerar också, har extra fördel av att inte göra några strängkonverteringar, så det är ren aritmetisk bearbetning (mycket snabb) och det är inte beroende av något datumformat. värde vars första del är ett heltal som representerar antalet dagar sedan 1 januari 1900, och den andra delen är ett decimaltal som representerar bråkdelen av en dag (för tiden) --- Så heltalsvärdet 0 (noll) översätts alltid direkt till midnattsmorgon den 1 januari 1900...

eller, tack vare förslag från @brinary,

Select DateAdd(yy, @Year-1900,  
       DateAdd(m,  @Month - 1, @DayOfMonth - 1)) 

Redigerad oktober 2014. Som noterat av @cade Roux har SQL 2012 nu en inbyggd funktion:
DATEFROMPARTS(year, month, day)
det gör samma sak.

Redigerad 3 oktober 2016, (Tack till @bambams för att du märkte detta och @brinary för att du fixade det), Den sista lösningen, föreslagen av @brinary. verkar inte fungera under skottår om inte årstillägg utförs först

select dateadd(month, @Month - 1, 
     dateadd(year, @Year-1900, @DayOfMonth - 1)); 


  1. Rails 3.1:Fråga efter postgres inom ett tidsintervall

  2. Vad betyder en tidsstämpel i T-Sql i C#?

  3. SQL Data Definition Language

  4. Hur FROM_BASE64() fungerar i MariaDB