none
Comparar campos entre dos fechas

    Pregunta

  • Hola a todos.

    Tengo una duda que necesito resolver. Necesito, en una vista, seleccionar los registros de una tabla A que se encuentran entre dos fechas. La dificultad que tengo es que la fecha en la tabla A está separada en 3 campos diferentes ANIO, MES, DIA.

    Con la siguiente cláusula logro compararlos registros con el día del sistema, pero yo necesito filtrar los con los días entre hoy y hoy+21 días.

    WHERE (tabla A.YEAR = DATEPART(YYYY, GETDATE()))
        AND (tabla A.MONTH = DATEPART(MM, GETDATE()))
        AND (tabla A.DAY = DATEPART(DD, GETDATE()))

    Muchas gracias por anticipado.

    miércoles, 11 de enero de 2017 21:01

Respuestas

  • Si tienes un SQL Server 2012 o posterior, puedes hacer esto:

    WHERE
    DATEFROMPARTS(tablaA.year, tablaA.month, tablaA.day)
    Between GetDate() and DATEADD(day, GetDate(), 21)

    Si tu SQL es más antiguo, no tiene el DATEFROMPARTS, pero lo puedes sustituir por alguna chapucilla parecida a esta:

    CAST(CAST(tablaA.Year AS varchar) + '-' + CAST(tablaA.Month AS varchar) + '-' + CAST(tablaA.Day AS varchar) AS DATETIME)

    miércoles, 11 de enero de 2017 21:34

Todas las respuestas

  • Saludos Nestos

    En primer lugar a menos que tengas registros a futuro dudo que te ayude, puedes hacer un DATEADD o usando un +

    SELECT DATEADD(DAY,21,GETDATE())
    
    SELECT GETDATE()+21
    Ops no vi que estaba en 3 partes, gracias Alberto, una vez formateado puedes usar lo que te expuse para sumar el dia.

    miércoles, 11 de enero de 2017 21:30
  • Si tienes un SQL Server 2012 o posterior, puedes hacer esto:

    WHERE
    DATEFROMPARTS(tablaA.year, tablaA.month, tablaA.day)
    Between GetDate() and DATEADD(day, GetDate(), 21)

    Si tu SQL es más antiguo, no tiene el DATEFROMPARTS, pero lo puedes sustituir por alguna chapucilla parecida a esta:

    CAST(CAST(tablaA.Year AS varchar) + '-' + CAST(tablaA.Month AS varchar) + '-' + CAST(tablaA.Day AS varchar) AS DATETIME)

    miércoles, 11 de enero de 2017 21:34