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

Jak działa YEARWEEK() w MariaDB

W MariaDB, YEARWEEK() to wbudowana funkcja daty i czasu, która zwraca rok i tydzień dla podanej daty.

Przyjmuje dwa argumenty; data, z której chcesz wyodrębnić rok i 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. Ponadto rok w wyniku może różnić się od roku w argumencie daty dla pierwszego i ostatniego tygodnia roku.

Składnia

Składnia wygląda tak:

YEARWEEK(date), YEARWEEK(date,mode)

Co można również wyrazić w ten sposób:

YEARWEEK(date[,mode])

Gdzie date jest wyrażeniem daty, z którego pobierany jest rok i tydzień, oraz 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 YEARWEEK() bez określenia trybu użyje trybu 0 .

Przykład

Oto przykład wywołania YEARWEEK() bez określania trybu:

SELECT YEARWEEK('2030-01-01');

Wynik:

+------------------------+
| YEARWEEK('2030-01-01') |
+------------------------+
|                 202952 |
+------------------------+

W tym przypadku wynikowy rok i tydzień pochodzą z poprzedniego roku.

Określ tryb

Oto przykład określenia trybu:

SELECT YEARWEEK('2030-01-01', 1);

Wynik:

+---------------------------+
| YEARWEEK('2030-01-01', 1) |
+---------------------------+
|                    203001 |
+---------------------------+

Tym razem wynik jest inny.

Przeanalizujmy wszystkie tryby dla tej samej daty:

SELECT 
    YEARWEEK('2030-01-01', 0),
    YEARWEEK('2030-01-01', 1),
    YEARWEEK('2030-01-01', 2),
    YEARWEEK('2030-01-01', 3),
    YEARWEEK('2030-01-01', 4),
    YEARWEEK('2030-01-01', 5),
    YEARWEEK('2030-01-01', 6),
    YEARWEEK('2030-01-01', 7);

Wynik (przy użyciu wyjścia pionowego):

YEARWEEK('2030-01-01', 0): 202952
YEARWEEK('2030-01-01', 1): 203001
YEARWEEK('2030-01-01', 2): 202952
YEARWEEK('2030-01-01', 3): 203001
YEARWEEK('2030-01-01', 4): 203001
YEARWEEK('2030-01-01', 5): 202953
YEARWEEK('2030-01-01', 6): 203001
YEARWEEK('2030-01-01', 7): 202953

Wartości daty i godziny

YEARWEEK() funkcja działa również z wartościami daty/godziny:

SELECT YEARWEEK('2030-08-01 10:30:45');

Wynik:

+---------------------------------+
| YEARWEEK('2030-08-01 10:30:45') |
+---------------------------------+
|                          203030 |
+---------------------------------+

Daty numeryczne

Możliwe jest również przekazywanie dat jako liczby, o ile ma to sens jako data.

Przykład

SELECT YEARWEEK(20301125);

Wynik:

+--------------------+
| YEARWEEK(20301125) |
+--------------------+
|             203047 |
+--------------------+

Lub nawet następujący (który używa dwucyfrowego roku):

SELECT YEARWEEK(301125);

Wynik:

+------------------+
| YEARWEEK(301125) |
+------------------+
|           203047 |
+------------------+

Ale to musi mieć sens jako randka. Oto, co się stanie, jeśli zwiększę część dnia do nieprawidłowego dnia:

SELECT YEARWEEK(20301135);

Wynik:

+--------------------+
| YEARWEEK(20301135) |
+--------------------+
|               NULL |
+--------------------+
1 row in set, 1 warning (0.000 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 
    YEARWEEK('2030/06/25'),
    YEARWEEK('2030,06,25'),
    YEARWEEK('2030:06:25'),
    YEARWEEK('2030;06!25');

Wynik (przy użyciu wyjścia pionowego):

YEARWEEK('2030/06/25'): 203025
YEARWEEK('2030,06,25'): 203025
YEARWEEK('2030:06:25'): 203025
YEARWEEK('2030;06!25'): 203025

Aktualna data

Możemy przekazać NOW() jako argument datetime, aby użyć bieżącej daty:

SELECT 
    NOW(),
    YEARWEEK(NOW());

Wynik:

+---------------------+-----------------+
| NOW()               | YEARWEEK(NOW()) |
+---------------------+-----------------+
| 2021-05-17 09:08:23 |          202120 |
+---------------------+-----------------+

Nieprawidłowe argumenty

Po przekazaniu nieprawidłowego argumentu YEARWEEK() zwraca null :

SELECT YEARWEEK('2030-65-78');

Wynik:

+------------------------+
| YEARWEEK('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 YEARWEEK() z niewłaściwą liczbą argumentów lub bez przekazywania jakichkolwiek argumentów powoduje błąd:

SELECT YEARWEEK();

Wynik:

ERROR 1582 (42000): Incorrect parameter count in the call to native function 'YEARWEEK'

I kolejny przykład:

SELECT YEARWEEK('2030-12-10', 1, 2);

Wynik:

ERROR 1582 (42000): Incorrect parameter count in the call to native function 'YEARWEEK'

  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 PERIOD_ADD() działa w MariaDB

  2. 3 sposoby na uzyskanie nazwy miesiąca z daty w MariaDB

  3. Porównanie MariaDB Enterprise Backup z ClusterControl Backup Management

  4. Jak zainstalować MariaDB na CentOS 8?

  5. Ogłaszamy obsługę MariaDB 10.2 — ClusterControl 1.5