Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

concatenar campo año, campo mes, campo dia, convertirlo en fecha y obtener diferencia

Estas en el tema de concatenar campo año, campo mes, campo dia, convertirlo en fecha y obtener diferencia en el foro de SQL Server en Foros del Web. que tal forer@s: veran, intento sacar la diferencia de dias entre dos fechas pero para esto necesito hacer los siguientes movimientos antes: tengo 6 campos ...
  #1 (permalink)  
Antiguo 11/11/2014, 11:59
Avatar de catpaw  
Fecha de Ingreso: mayo-2010
Ubicación: xalapa
Mensajes: 856
Antigüedad: 14 años, 6 meses
Puntos: 23
concatenar campo año, campo mes, campo dia, convertirlo en fecha y obtener diferencia

que tal forer@s:

veran, intento sacar la diferencia de dias entre dos fechas pero para esto necesito hacer los siguientes movimientos antes:

tengo 6 campos int:

anio_hasta
mes_hasta
dia_hasta
anio_desde
mes_desde
dia_desde

lo que tengo hacer es concatenarlos no? bueno pues hago esto:

anio_hasta+mes_hasta+dia_hasta as hasta
anio_desde+mes_desde+dia_desde as desde

ejemplo:

anio_hasta 2010
mes_hasta 1
dia_hasta 26

y pasa que obtengo :

hasta 2037

en lugar de concatenar lo esta sumando

despues intento ya hacerlo directo:

convert(datetime, anio_hasta+mes_hasta+dia_hasta)

y obtengo:

1905-07-15 00:00:00.000

una fecha loca

entonces pense en primero convertir a char los campos y luego concatenarlos:

cast(anio_hasta as CHAR(4))+cast(mes_hasta as CHAR(2))+cast(dia_hasta as CHAR(2))

y obtengo:

20108 3

va mejorando, pero ahora por ejemplo el dia que es 3 necesito que sea 03 no?
el caso es que cuando intento convertirlo a fecha me sale un error:

convert(datetime,cast(anio_hasta as CHAR(4))+cast(mes_hasta as CHAR(2))+cast(dia_hasta as CHAR(2)))

este es el error:

Conversion failed when converting date and/or time from character string.

se que para sacar la diferencia necesito algo asi:

DATEDIFF (day, convert(datetime, hasta),convert(datetime, desde)) as dias

como le hago?

gracias
  #2 (permalink)  
Antiguo 11/11/2014, 12:40
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 3 meses
Puntos: 774
Respuesta: concatenar campo año, campo mes, campo dia, convertirlo en fecha y obtener

6 campos, formato de fecha no mencionas pero supongamos que tienes MM/DD/YYYY ok?? bueno entonces hacemos esto:

Código SQL:
Ver original
  1. DECLARE @dia_desde INT
  2. DECLARE @mes_desde INT
  3. DECLARE @anio_desde INT
  4. DECLARE @dia_hasta INT
  5. DECLARE @mes_hasta INT
  6. DECLARE @anio_hasta INT
  7.  
  8. SET @dia_desde=1
  9. SET @mes_desde=1
  10. SET @anio_desde=2013
  11. SET @dia_hasta=1
  12. SET @mes_hasta=1
  13. SET @anio_hasta=2014
  14.  
  15. SELECT datediff(dd,fecha2,fecha1) AS dias,datediff(mm,fecha2,fecha1) AS meses,datediff(yyyy,fecha2,fecha1) AS anios  FROM(
  16. SELECT CONVERT(datetime,(CONVERT(VARCHAR(10),@mes_hasta) + '/' + CONVERT(VARCHAR(10),@dia_hasta) + '/' + CONVERT(VARCHAR(10),@anio_hasta))) AS fecha1,
  17. CONVERT(datetime,(CONVERT(VARCHAR(10),@mes_desde) + '/' + CONVERT(VARCHAR(10),@dia_desde) + '/' + CONVERT(VARCHAR(10),@anio_desde))) AS fecha2
  18. ) AS t1

para que tanto brinco estando el suelo tan parejo ;)
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 11/11/2014, 12:49
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: concatenar campo año, campo mes, campo dia, convertirlo en fecha y obtener

Lo que yo menos entiendo es por qué están esa fechas tan atomizadas... Nunca he entendido la idea de almacenar una fecha, que es un dato de tipo unico en BBDD y la mayoría delos lenguajes de alto nivel, en esa forma fragmentaria.
A mi entender es un desperdicio de tiempo y recursos....

¿Tiene alguna utildiad para ti, que no conozcamos y no pueda ser suplida por el uso de funciones?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #4 (permalink)  
Antiguo 11/11/2014, 13:34
Avatar de catpaw  
Fecha de Ingreso: mayo-2010
Ubicación: xalapa
Mensajes: 856
Antigüedad: 14 años, 6 meses
Puntos: 23
Respuesta: concatenar campo año, campo mes, campo dia, convertirlo en fecha y obtener

ya quedo mil gracias

el detalle es que la fecha se la estaba pasando como AAAAMMDD

y cuando vi tu conversion Libras vi que lo haces asi MM/DD/AAAA

con eso supongo que la reconoce como fecha valida verdad?
  #5 (permalink)  
Antiguo 11/11/2014, 14:05
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 3 meses
Puntos: 774
Respuesta: concatenar campo año, campo mes, campo dia, convertirlo en fecha y obtener

depende de la configuracion de tu servidor y del collation que tengas, para saber ejecuta un simple select getdate() y asi veras que formato de fecha tienes en tu server
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #6 (permalink)  
Antiguo 11/11/2014, 15:15
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 17 años, 4 meses
Puntos: 180
Respuesta: concatenar campo año, campo mes, campo dia, convertirlo en fecha y obtener

SIEMPRE, SIEMPRE, SIEMPRE, SIEMPRE, manejar un formato estándar

YYYYMMDD

Y se evitan los problemas, ¿Qué parte no se entiende?
__________________
MCTS Isaias Islas

Etiquetas: año, campo, concatenar, dia, diferencia, fecha, siguiente
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:09.