none
Eliminar los sabados y domingos de consulta sql server RRS feed

  • Pregunta

  • @Termino as varchar(10) as SET DATEFIRST 1 DECLARE @FechaInicio DATE set @FechaInicio = '06/04/2019' DECLARE @FechaFin DATE set @FechaFin = '11/14/2019' DECLARE @Fechas Table (Fecha DATE) DECLARE @Lunes DATE SET @dia= DATEADD(d, 8 - DatePart(dw, @FechaInicio), @FechaInicio) WHILE(@dia <=@FechaFin) BEGIN INSERT INTO @Fechas VALUES (@dia) SET @Lunes = DATEADD(d, 28, @dia) END SELECT Row_Number() over(order by Fecha), Fecha FROM @Fechas

    No quiero que se cuenten los sabados y domingos en esta consulta solo 28 dias osea 4 semanas sin contar los sabado sy domingos

    lunes, 10 de junio de 2019 20:52

Respuestas

  • Hola Efrain Diaz:

    Solo tienes que utilizar top(28)

    Declare @dia date;
    /* numero de días */
    declare @numDias int = 28;
    SET DATEFIRST 1
       DECLARE @FechaInicio DATE set @FechaInicio = '20190604'
       DECLARE @FechaFin DATE set @FechaFin = '20191114'  
       
    
    ;WITH c1
    	AS (SELECT number
    	    FROM   
    		    master..spt_values
    	    WHERE  type = 'P  '
    	    
    	    ),
    	d1
    	AS (
    /* utilizamos el operador top para limitar */
    SELECT top(@numDias) DATEADD(day, c1.number, @fechainicio) AS dia
    	    FROM   
    		    c1
    	    WHERE  @FechaFin >= DATEADD(day, c1.number, @fechainicio)
    			 AND DATEPART(dw, (DATEADD(day, c1.number, @fechainicio))) < 6)
    	
    	SELECT ROW_NUMBER() OVER(ORDER BY D1.DIA) AS ROW, D1.dia
    	FROM   
    		d1;

    Salida


    • Marcado como respuesta Efrain Diaz jueves, 13 de junio de 2019 14:22
    martes, 11 de junio de 2019 19:11

Todas las respuestas

  • Este select te devolverel dia conforme la configuracion de tu idioma.

    

    Solo te quedaría realizar una condición e ir incrementando cuando no sea sábado ni domingo. "Transact SQL".

    Espero te sirva de ayuda. 

    • Propuesto como respuesta Carlos_Ruiz_M lunes, 10 de junio de 2019 22:47
    lunes, 10 de junio de 2019 21:09
  • Hola Efrain Diaz:

    Puedes hacerlo sin el while

    Declare @dia date;
    SET DATEFIRST 1
       DECLARE @FechaInicio DATE set @FechaInicio = '20190604'
       DECLARE @FechaFin DATE set @FechaFin = '20191114'  
       
    
    ;WITH c1
    	AS (SELECT number
    	    FROM   
    		    master..spt_values
    	    WHERE  type = 'P  '),
    	d1
    	AS (SELECT DATEADD(day, c1.number, @fechainicio) AS dia
    	    FROM   
    		    c1
    	    WHERE  @FechaFin >= DATEADD(day, c1.number, @fechainicio)
    			 AND DATEPART(dw, (DATEADD(day, c1.number, @fechainicio))) < 6)
    	
    	SELECT ROW_NUMBER() OVER(ORDER BY D1.DIA) AS ROW, D1.dia
    	FROM   
    		d1;

    Datepart

    https://docs.microsoft.com/es-es/sql/t-sql/functions/datepart-transact-sql?view=sql-server-2017

    martes, 11 de junio de 2019 3:52
  • Gracias por responder, pero en tu consulta me saca todos los dias y yo no quiero todos los dias sino todos los meses por eso mi consulta tiene DATEADD(d, 28, @dia), necesito sacar los 28 dias que son 4 semanas sin que cuente los sabados y domingos, gracias
    martes, 11 de junio de 2019 14:53
  • Hola Efrain Diaz:

    Solo tienes que utilizar top(28)

    Declare @dia date;
    /* numero de días */
    declare @numDias int = 28;
    SET DATEFIRST 1
       DECLARE @FechaInicio DATE set @FechaInicio = '20190604'
       DECLARE @FechaFin DATE set @FechaFin = '20191114'  
       
    
    ;WITH c1
    	AS (SELECT number
    	    FROM   
    		    master..spt_values
    	    WHERE  type = 'P  '
    	    
    	    ),
    	d1
    	AS (
    /* utilizamos el operador top para limitar */
    SELECT top(@numDias) DATEADD(day, c1.number, @fechainicio) AS dia
    	    FROM   
    		    c1
    	    WHERE  @FechaFin >= DATEADD(day, c1.number, @fechainicio)
    			 AND DATEPART(dw, (DATEADD(day, c1.number, @fechainicio))) < 6)
    	
    	SELECT ROW_NUMBER() OVER(ORDER BY D1.DIA) AS ROW, D1.dia
    	FROM   
    		d1;

    Salida


    • Marcado como respuesta Efrain Diaz jueves, 13 de junio de 2019 14:22
    martes, 11 de junio de 2019 19:11