2010-07-28 10 views
14

¿Cómo puedo convertir un día [1-31] ​​y un mes [1-12] y un año (todo int) a una fecha serial IN SQL (sin convertir a varchar)?Fecha de serie en SQL?

+0

Por sin convertir a varchar, querrá decir que se excluye la construcción de una fecha ISO 'aaaa-mm-dd'? – pascal

+0

Sé acerca de la fecha ISO. pero de verdad funciona? En MS-SQL 2005? Y en todas las combinaciones posibles de idiomas/culturas (sistema operativo, usuario, usuario de base de datos, usuario de IIS). Sí, sé que es un estándar, pero debo decir que ya no tengo mucha fe en los llamados estándares. Además, es más rápido sin varchar. –

+0

¿Qué quiere decir con "fecha de serie"? – onedaywhen

Respuesta

27

Cero es de 01 jan 1900 en SQL, lo que puede utilizar esto:

DATEADD(day, @dayval-1, 
    DATEADD(month, @monthval-1, 
     DATEADD(year, @yearval-1900, 0) 
    ) 
) 

edición, febrero de 2018

Como dice la otra respuesta, ya que SQL Server 2012 (publicado después de la respuesta original) podemos utilizar DATEFROMPARTS

SELECT DATEFROMPARTS (@yearval, @monthval, @dayval) 
+0

Cool - ¡Gracias! –

+0

+1 por elegancia. ¡gracias! – RubyTuesdayDONO

+0

Comentando aquí para ayudar a otros en el futuro, ya que tenía problemas para reconciliar las publicaciones seriadas por fecha y esta respuesta me ayudó a resolverlo. ¡La fecha de serie en SQL es diferente a Excel en 1 día! –

Cuestiones relacionadas