none
Generar tabla con dias entre dos fechas

    Pregunta

  • Tengo:

    DECLARE @table table( idCliente int, fechaDesde date , fechaHasta date ) 

    INSERT @table VALUES( 112233 , '20120107' , '20120110');
    INSERT @table VALUES( 112233 , '20120117' , '20120120');

    WITH x AS 
    (
    SELECT  i.idCliente, i.fechaDesde as fecha FROM @table i
    UNION ALL
    SELECT t.idCliente,  DATEADD( d , 1 ,fecha )
    FROM @table t INNER JOIN x ON t.idCliente = x.idCliente AND  DATEADD( d , 1 ,x.fecha ) <= t.fechaHasta
    )
    SELECT distinct idCliente, LEFT( CONVERT( VARCHAR, fecha , 112 ) , 8 ) as fecha 
    FROM x OPTION(MAXRECURSION 0)

    Espero el siguiente resultado:

    idCliente fecha
    112233 20120109
    112233 20120110
    112233 20120119
    112233 20120120

    Pero me sale esto:

    idCliente fecha
    112233 20120109
    112233 20120110
    112233 20120111
    112233 20120112
    112233 20120113
    112233 20120114
    112233 20120115
    112233 20120116
    112233 20120117
    112233 20120118
    112233 20120119
    112233 20120120

    Alguien tiene una explicación ?


    jueves, 08 de febrero de 2018 8:19

Todas las respuestas

  • Perdón la sentencia es:

    DECLARE @table table( idCliente int, fechaDesde date , fechaHasta date ) 

    INSERT @table VALUES( 112233 , '20120109' , '20120110');
    INSERT @table VALUES( 112233 , '20120119' , '20120120');

    WITH x AS 
    (
    SELECT  i.idCliente, i.fechaDesde as fecha FROM @table i
    UNION ALL
    SELECT t.idCliente,  DATEADD( d , 1 ,fecha )
    FROM @table t INNER JOIN x ON t.idCliente = x.idCliente AND  DATEADD( d , 1 ,x.fecha ) <= t.fechaHasta
    )
    SELECT distinct idCliente, LEFT( CONVERT( VARCHAR, fecha , 112 ) , 8 ) as fecha 
    FROM x OPTION(MAXRECURSION 0)

    jueves, 08 de febrero de 2018 8:21
  • Saludos

    No veo logica en tu pregunta, si le das un rango y estas pasando el cursos por 1 dia en la fecha

    SELECT t.idCliente,  DATEADD( d , 1 ,fecha )

    El resultado es el esperado, podrias explicar porque no quieres esas fechas intermedias? o que no quieres parece que no quieres los dias de la semana y solo el fin de semana.


    Blog: www.sqlservertoolbox.blogspot.com.mx

    jueves, 08 de febrero de 2018 14:12