sql >> Base de Datos >  >> RDS >> Sqlserver

Crear una fecha de día mes y año con T-SQL

Prueba esto:

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

También funciona, tiene el beneficio adicional de no realizar ninguna conversión de cadenas, por lo que es un procesamiento aritmético puro (muy rápido) y no depende de ningún formato de fecha. valor cuya primera parte es un número entero que representa el número de días desde el 1 de enero de 1900, y la segunda parte es una fracción decimal que representa la parte fraccionaria de un día (por el tiempo) --- Por lo tanto, el valor entero es 0 (cero) siempre se traduce directamente a la medianoche del 1 de enero de 1900...

o, gracias a la sugerencia de @brinary,

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

Editado en octubre de 2014. Como señaló @cade Roux, SQL 2012 ahora tiene una función integrada:
DATEFROMPARTS(year, month, day)
que hace lo mismo.

Editado el 3 de octubre de 2016 (gracias a @bambams por darse cuenta de esto y a @brinary por solucionarlo), la última solución, propuesta por @brinary. no parece funcionar para los años bisiestos a menos que primero se realice la suma de años

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