Saltar al contenido

Cómo obtener el número de semana del mes a partir de la fecha en SQL Server 2008

Esta es la respuesta más acertada que te podemos compartir, pero estúdiala pausadamente y valora si es compatible a tu proyecto.

Solución:

Aquí hay 2 formas diferentes, ambas suponen que la semana comienza el lunes

Si desea que las semanas estén completas, para que pertenezcan al mes en el que comienzan: Entonces, el sábado 2012-09-01 y el domingo 2012-09-02 es la semana 4 y el lunes 2012-09-03 es la semana 1, use esto:

declare @date datetime = '2012-09-01'
select datepart(day, datediff(day, 0, @date)/7 * 7)/7 + 1

Si sus semanas se cortan en el cambio de mes, el sábado 2012-09-01 y el domingo 2012-09-02 es la semana 1 y el lunes 2012-09-03 es la semana 2, use esto:

declare @date datetime = '2012-09-01'
select datediff(week, dateadd(week, 
  datediff(day,0,dateadd(month,
    datediff(month,0,@date),0))/7, 0),@date-1) + 1

Recibí un correo electrónico de Gerald. Señaló una falla en el segundo método. Esto debe ser resuelto ahora

DECLARE @DATE DATETIME
SET @DATE = '2013-08-04'

SELECT DATEPART(WEEK, @DATE)  -
    DATEPART(WEEK, DATEADD(MM, DATEDIFF(MM,0,@DATE), 0))+ 1 AS WEEK_OF_MONTH

Sin función incorporada. Depende de lo que quieras decir con semana del mes. Podría querer decir si es en los primeros 7 días (semana 1), los segundos 7 días (semana 2), etc. En ese caso, solo sería

(DATEPART(day,@Date)-1)/7 + 1

Si desea utilizar la misma numeración de semanas que se utiliza con DATEPART (semana,), puede utilizar la diferencia entre los números de semana del primer día del mes y la fecha en cuestión (+1):

(DATEPART(week,@Date)- DATEPART(week,DATEADD(m, DATEDIFF(m, 0, @Date), 0))) + 1

O puede que necesite algo más, dependiendo de lo que quiera decir con el número de semana.

No se te olvide compartir este tutorial si te fue de ayuda.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *