none
Funcion para calcular la cantidad de lunes (u otro dia) de un mes con a#o RRS feed

  • Pregunta

  • Saludos,

    Existe alguna funcion para un mes con el a#o calcule cuantos dias de un dia de semana (lunes por ejemplo) tiene ese mes de ese a#o?

    Gracias de antemano,


    • Editado Juliovbhlp lunes, 16 de julio de 2012 14:24 Error de formulacion
    lunes, 16 de julio de 2012 14:22

Respuestas

Todas las respuestas

  • Deberías haber indicado la versión de SQL Server que estás usando, de ese modo nos resultaría más sencillo buscar una solución a tu problema.

    En cuanto a tu pregunta en sí, la respuesta es que no existe esa función, pero no es complicado hacerla. Si tuvieras una tabla calendario o de números sería más sencillo, pero suponiendo que no cuentes con ninguna de las dos, el siguiente script devuelve el número de lunes que hay en el mes actual (julio de 2012):

    DECLARE @StartDate DATETIME 
    DECLARE @EndDate DATETIME 
    SET @StartDate = '20120701' 
    SET @EndDate = '20120801' 
     
    ; WITH tn AS (
    	SELECT ROW_NUMBER() OVER (ORDER BY id) AS n
    	FROM sys.sysobjects
    ), ds AS 
    (
    	SELECT DATEADD(day, n-1,@startdate) as dd 
    	FROM tn 
    	WHERE n BETWEEN 1 AND DATEDIFF(day, @StartDate, @EndDate))
    SELECT COUNT(*) AS numberDays
    FROM  ds
    WHERE DATEPART(weekday, dd + @@DATEFIRST - 1)  = 1

    lunes, 16 de julio de 2012 14:57
  • Una manera facil de resolver este tipo de preguntas, es usando una tabla calendario.

    select count(*) as cantidad_de_lunes_en_el anio
    from calendar
    where dia_semana = 'Lunes' and anio = 2012;

    -- cantidad de lunes no feriados
    select count(*) as cantidad_de_lunes_en_el anio
    from calendar
    where dia_semana = 'Lunes' and anio = 2012 and es_dia_feriado = 0;

    Why should I consider using an auxiliary calendar table?
    http://sqlserver2000.databases.aspfaq.com/why-should-i-consider-using-an-auxiliary-calendar-table.html


    AMB

    Some guidelines for posting questions...

    • Marcado como respuesta Juliovbhlp lunes, 16 de julio de 2012 15:37
    lunes, 16 de julio de 2012 15:01
  • Mi contribución:

    Declare @FromDate DateTime,
            @ToDate DateTime;
    Select  @FromDate='20110101',
            @ToDate='20111231';
    Declare @WeekDay Int;
    Select  @WeekDay=2; --2=Lunes
    Select (Cast(@ToDate As Int)+2-@WeekDay)/7-(Cast(@FromDate As Int)+1-@WeekDay)/7 [Weekdays];
    Espero que te ayude.


    Blog: http://about.me/GeriReshef

    lunes, 16 de julio de 2012 15:11
  • Gracias a todos. Veo mas facil y mas funcional la tabla calendario definitivamente.

    lunes, 16 de julio de 2012 15:38