2012-06-11 15 views
5

me gustaría tener el número de la semana y el año, para una fecha determinada, a partir de MySQL con las siguientes reglas:Fin de año con MySQL

  • Si la fecha se encuentra al final del año, pero en la primera semana del próximo año, necesito devolver 1 como número de semana.
  • Si la fecha es a principios de año, pero en la última semana del año anterior, necesito devolver 52 (o 53) como número de semana.

He leído la función de semana en MySQL pero no puedo obtener el resultado que quiero.

Date and Time Functions: WEEK(date[,mode])

estoy en el calendario francés, así que tengo que comenzar la semana el lunes y la semana 1 es la primera semana con más de 3 días este año.

Por lo tanto sólo pueden utilizar las opciones 1 y 3.

Cuando escribo las siguientes consultas:

  • seleccione semana ('2012-12-31', 3), el resultado es 1

  • semana seleccione ('2012-12-31', 1), el resultado es 53

Cuando la prueba en la primera Jan 2016:

  • seleccione semana ('1/1/2016', 3), el resultado es 53

  • semanas de selección ('1/1/2016', 1), el resultado es 0

La opción 1 no se puede utilizar, porque no puedo detectar que el 2012-12-31 sea el próximo año.

opción 3 puede ser utilizado, pero tengo las sumas dos piezas de la lógica: si WeekNumber = 1 y el mes = 12, año + 1 y si weekumber = 53 y el mes = 1, entonces el año - 1

¿El alguien tiene una mejor solución?

Saludos

+0

No estoy muy claro en sus reglas, pero ¿qué pasa con el modo 7? – deadly

+0

el modo 7 es "con un lunes de este año", así que no puedo usarlo ... no sigue las reglas francesas. en mi necesidad si el 1/1/2013 es la semana 1 y es un día, me gustaría tener el 12/31/2011 semana 1 + año 2012. Creo que tengo que usar IF –

Respuesta

2

Ok, creo que entiendo lo que estamos tratando de hacer ahora.

A medida que la documentación dice:

decidimos volver 0 en lugar porque queremos que la función retorne “el número de la semana en el año dado.”

Si desea que el número de la semana para el año que la semana está en, sugieren el uso de la YEARWEEK() function, que toma los mismos argumentos del modo como WEEK():

Si prefiere el resultado de ser evaluados con respecto al año que contiene el primer día de la semana para la fecha dada ... utilizar la función YEARWEEK():

mysql> SELECT YEARWEEK('2000-01-01'); 
     -> 199952 
mysql> SELECT MID(YEARWEEK('2000-01-01'),5,2); 
     -> '52' 

por lo que algunos ejemplos de lo que tendría que utilizar:

mysql> SELECT MID(YEARWEEK('2012-1-1',3),5,2) 
     -> '52' 
mysql> SELECT MID(YEARWEEK('2012-12-31',3),5,2) 
     -> '01' 
+0

¡muchas gracias! –