sql >> Databáze >  >> RDS >> Sqlserver

Vytvořte datum ze dne, měsíce a roku pomocí T-SQL

Zkuste toto:

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)))

Funguje to také, má další výhodu v tom, že neprovádí žádné převody řetězců, takže jde o čisté aritmetické zpracování (velmi rychlé) a není závislé na žádném formátu data. To těží ze skutečnosti, že interní reprezentace SQL Serveru pro hodnoty datetime a smalldatetime je dvoudílná. hodnota, jejíž první část je celé číslo představující počet dní od 1. ledna 1900 a druhá část je desetinný zlomek představující zlomkovou část jednoho dne (pro daný čas) --- Takže celočíselná hodnota 0 (nula) se vždy překládá přímo do půlnočního rána 1. ledna 1900...

nebo díky návrhu od @brinary

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

Upraveno v říjnu 2014. Jak poznamenal @cade Roux, SQL 2012 má nyní vestavěnou funkci:
DATEFROMPARTS(year, month, day)
to dělá to samé.

Upraveno 3. října 2016 (Děkujeme @bambams, že si toho všiml, a @brinary za opravu), Poslední řešení navržené @brinary. nezdá se, že by fungoval v přestupných letech, pokud se nejprve neprovede sčítání let

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


  1. Příklady UTC_TIMESTAMP() – MySQL

  2. Monitorování PostgreSQL v hybridním prostředí

  3. SQLite AVG

  4. Laravel 5.2 – Použít řetězec jako vlastní primární klíč pro výmluvnou tabulku se stane 0