MariaDB
 sql >> Baza danych >  >> RDS >> MariaDB

Jak WEEK() działa w MariaDB

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

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak zainstalować MariaDB 10 na RHEL 8?

  2. Jak działa TRUNCATE() w MariaDB

  3. Monitorowanie klastra Galera dla MySQL lub MariaDB — zrozumienie metryk (zaktualizowane)

  4. MariaDB Backup i PostgreSQL w chmurze — ClusterControl w wersji 1.6.1

  5. Optymalizacje zapisu dla Qualcomm Centriq 2400 w wersji kandydata wersji MariaDB 10.3.5