sql >> Database teknologi >  >> RDS >> Sqlserver

Opret en dato fra dag måned og år med T-SQL

Prøv dette:

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 virker også, har en ekstra fordel ved ikke at lave nogen strengkonverteringer, så det er ren aritmetisk behandling (meget hurtig), og den er ikke afhængig af noget datoformat. Dette udnytter det faktum, at SQL Servers interne repræsentation for datetime og smalldatetime-værdier er en todelt værdi, hvis første del er et heltal, der repræsenterer antallet af dage siden 1. januar 1900, og den anden del er en decimalbrøk, der repræsenterer brøkdelen af ​​én dag (for tiden) --- Så heltalsværdien 0 (nul) oversættes altid direkte til midnatmorgen den 1. januar 1900...

eller takket være forslag fra @brinary,

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

Redigeret oktober 2014. Som bemærket af @cade Roux har SQL 2012 nu en indbygget funktion:
DATEFROMPARTS(year, month, day)
det gør det samme.

Redigeret 3. oktober 2016, (Tak til @bambams for at bemærke dette, og @brinary for at rette det), Den sidste løsning, foreslået af @brinary. ser ikke ud til at virke i skudår, medmindre årstilsætning udføres først

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


  1. Brug af Oracle-database med CakePHP 2.0

  2. Sådan aktiveres komprimering på en eksisterende tabel i SQL Server (T-SQL)

  3. Gendannelse af en mySQL-instans fra en anden brugerkonto (macOS)

  4. Strengsammenkædningsoperatør i Oracle, Postgres og SQL Server