W MariaDB, WEEK() to wbudowana funkcja daty i czasu, która zwraca tydzień z podanego wyrażenia daty.
Przyjmuje dwa argumenty; data, z której chcesz wyodrębnić tydzień, oraz opcjonalny argument trybu określający tryb, który ma zostać użyty w wyniku.
Zwraca tydzień jako liczbę z zakresu 0 do 53 lub 1 do 53 , w zależności od używanego trybu.
Składnia
Składnia wygląda tak:
WEEK(date[,mode])
Gdzie date jest wyrażeniem daty, z którego należy pobrać tydzień, a mode jest opcjonalnym argumentem, który pozwala określić tryb do użycia.
Tryby
Opcjonalny mode argument określa, czy tydzień zaczyna się w niedzielę, czy w poniedziałek, i czy wartość zwracana powinna mieścić się w zakresie od 0 do 53 lub z 1 do 53 .
Argument mode może być jednym z następujących:
| Tryb | pierwszy dzień tygodnia | Zakres | Tydzień 1 to pierwszy tydzień z… |
|---|---|---|---|
| 0 | Niedziela | 0-53 | niedziela w tym roku |
| 1 | Poniedziałek | 0-53 | więcej niż 3 dni w tym roku |
| 2 | Niedziela | 1-53 | niedziela w tym roku |
| 3 | Poniedziałek | 1-53 | więcej niż 3 dni w tym roku (zgodnie z ISO 8601:1988) |
| 4 | Niedziela | 0-53 | więcej niż 3 dni w tym roku |
| 5 | Poniedziałek | 0-53 | poniedziałek w tym roku |
| 6 | Niedziela | 1-53 | więcej niż 3 dni w tym roku |
| 7 | Poniedziałek | 1-53 | poniedziałek w tym roku |
Jeśli argument mode zostanie pominięty, wartość default_week_format używana jest zmienna systemowa.
Sprawdźmy wartość mojego default_week_format zmienna systemowa:
SELECT @@default_week_format; Wynik:
+-----------------------+ | @@default_week_format | +-----------------------+ | 0 | +-----------------------+
Teraz, kiedy uruchamiam WEEK() bez określenia trybu użyje trybu 0 .
Przykład
Oto przykład wywołania WEEK() bez określania trybu:
SELECT WEEK('2030-01-01'); Wynik:
+--------------------+
| WEEK('2030-01-01') |
+--------------------+
| 0 |
+--------------------+ Określ tryb
Oto przykład określenia trybu:
SELECT WEEK('2030-01-01', 1); Wynik:
+-----------------------+
| WEEK('2030-01-01', 1) |
+-----------------------+
| 1 |
+-----------------------+
Tym razem wynik to 1 zamiast 0 .
Przeanalizujmy wszystkie tryby dla tej samej daty:
SELECT
WEEK('2030-01-01', 0),
WEEK('2030-01-01', 1),
WEEK('2030-01-01', 2),
WEEK('2030-01-01', 3),
WEEK('2030-01-01', 4),
WEEK('2030-01-01', 5),
WEEK('2030-01-01', 6),
WEEK('2030-01-01', 7); Wynik (przy użyciu wyjścia pionowego):
WEEK('2030-01-01', 0): 0
WEEK('2030-01-01', 1): 1
WEEK('2030-01-01', 2): 52
WEEK('2030-01-01', 3): 1
WEEK('2030-01-01', 4): 1
WEEK('2030-01-01', 5): 0
WEEK('2030-01-01', 6): 1
WEEK('2030-01-01', 7): 53 Wartości daty i godziny
WEEK() funkcja działa również z wartościami daty/godziny:
SELECT WEEK('2030-08-01 10:30:45'); Wynik:
+-----------------------------+
| WEEK('2030-08-01 10:30:45') |
+-----------------------------+
| 30 |
+-----------------------------+ Daty numeryczne
Możliwe jest również przekazywanie dat jako liczby, o ile ma to sens jako data.
Przykład
SELECT WEEK(20301125); Wynik:
+----------------+ | WEEK(20301125) | +----------------+ | 47 | +----------------+
Lub nawet następujący (który używa dwucyfrowego roku):
SELECT WEEK(301125); Wynik:
+--------------+ | WEEK(301125) | +--------------+ | 47 | +--------------+
Ale to musi mieć sens jako randka. Oto, co się stanie, jeśli zwiększę część dnia do nieprawidłowego dnia:
SELECT WEEK(20301135); Wynik:
+----------------+ | WEEK(20301135) | +----------------+ | NULL | +----------------+ 1 row in set, 1 warning (0.001 sec)
Zwrócił null z ostrzeżeniem.
Spójrzmy na ostrzeżenie:
SHOW WARNINGS; Wynik:
+---------+------+--------------------------------------+ | Level | Code | Message | +---------+------+--------------------------------------+ | Warning | 1292 | Incorrect datetime value: '20301135' | +---------+------+--------------------------------------+
Inne ograniczniki
Możesz użyć innych ograniczników daty. MariaDB jest dość wyrozumiała, jeśli chodzi o ograniczniki dat. Oto kilka poprawnych przykładów:
SELECT
WEEK('2030/06/25'),
WEEK('2030,06,25'),
WEEK('2030:06:25'),
WEEK('2030;06!25'); Wynik (przy użyciu wyjścia pionowego):
WEEK('2030/06/25'): 25
WEEK('2030,06,25'): 25
WEEK('2030:06:25'): 25
WEEK('2030;06!25'): 25 Aktualna data
Możemy przekazać NOW() jako argument datetime, aby użyć bieżącej daty:
SELECT
NOW(),
WEEK(NOW()); Wynik:
+---------------------+-------------+ | NOW() | WEEK(NOW()) | +---------------------+-------------+ | 2021-05-17 08:36:12 | 20 | +---------------------+-------------+
Nieprawidłowe argumenty
Po przekazaniu nieprawidłowego argumentu WEEK() zwraca null :
SELECT WEEK('2030-65-78'); Wynik:
+--------------------+
| WEEK('2030-65-78') |
+--------------------+
| NULL |
+--------------------+
1 row in set, 1 warning (0.000 sec) Pokażmy ostrzeżenie:
SHOW WARNINGS; Wynik:
+---------+------+----------------------------------------+ | Level | Code | Message | +---------+------+----------------------------------------+ | Warning | 1292 | Incorrect datetime value: '2030-65-78' | +---------+------+----------------------------------------+
Brakujący argument
Wywołanie WEEK() z niewłaściwą liczbą argumentów lub bez przekazywania jakichkolwiek argumentów powoduje błąd:
SELECT WEEK(); Wynik:
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ')' at line 1
I kolejny przykład:
SELECT WEEK('2030-12-10', 1, 2); Wynik:
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ' 2)' at line 1