2012-06-11 9 views
5

chciałbym mieć numer tygodnia i roku, na dany dzień, z MySQL z następującymi zasadami:Koniec roku z MySQL

  • Jeśli data jest na koniec bieżącego roku, ale w pierwszym tygodniu następnego roku muszę zwrócić 1 jako numer tygodnia.
  • Jeśli data jest na początku roku, ale w ostatnim tygodniu poprzedniego roku, muszę zwrócić 52 (lub 53) jako numer tygodnia.

Czytałem funkcję tygodnia w MySQL, ale nie mogę uzyskać pożądanego rezultatu.

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

jestem na francuskim kalendarzu, więc muszę zacząć tydzień w poniedziałek i tydzień 1 jest pierwszym tygodniu z więcej niż 3 dni w tym roku.

Dlatego mogę korzystać tylko z opcji 1 i 3.

Kiedy piszę następujące zapytania:

  • wybierz tydzień ('2012-12-31', 3), wynik 1

  • wybierz tygodni ('2012-12-31', 1), wynik jest 53

Kiedy testować na 1 Styczeń 2016:

  • wybierz tygodni ('01.01.2016', 3), wynik jest 53

  • wybierz tygodni ('01.01.2016', 1), wynik jest 0

Opcja 1 nie może być używana, ponieważ nie mogę wykryć, że 2012-12-31 jest w przyszłym roku.

Wariant 3 może być używany, ale mam dodać dwa kawałki logiki: jeśli weeknumber = 1 miesiąc = 12 lat + 1, a jeśli weekumber = 53, a miesiąc = 1 wtedy rok - 1

Does ktoś ma lepsze rozwiązanie?

Pozdrowienia

+0

Nie jestem do końca jasne o zasady, ale co o trybie 7? – deadly

+0

Tryb 7 jest "z poniedziałkiem w tym roku", więc nie mogę go użyć ... nie jest zgodny z francuskimi zasadami. na moje potrzeby, jeśli 1/1/2013 to tydzień 1 i jest to dzień powszedni, chciałbym mieć 12/31/2011 tydzień 1 + rok 2012. Myślę, że muszę użyć IF –

Odpowiedz

2

Ok, myślę, że to, czego próbujemy zrobić teraz.

Jako dokumentacja mówi:

Zdecydowaliśmy się zwraca 0 zamiast ponieważ chcemy funkcja powrotu „numer tygodnia w danym roku.”

Jeśli chcesz numer tygodnia za rok, że tydzień jest w, sugerują pomocą YEARWEEK() function, która przyjmuje te same argumenty trybu w WEEK():

Jeśli wolisz ten wynik być oceniane w odniesieniu do roku zawierającą pierwszy dzień tygodnia dla podanej daty ... użyć YEARWEEK() funkcję:

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

więc niektóre przykłady tego, co byłoby użyć:

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

wielkie dzięki! –