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

Jak EXTRACT() działa w MariaDB

W MariaDB, EXTRACT() jest wbudowaną funkcją daty i czasu, która zwraca określoną jednostkę z podanego wyrażenia daty lub czasu.

Składnia

Składnia wygląda tak:

EXTRACT(unit FROM date)

Gdzie unit jest prawidłową jednostką daty i czasu, a date to data, z której należy wyodrębnić tę jednostkę.

Przykład

Oto przykład, który wyodrębnia rok z daty:

SELECT EXTRACT(YEAR FROM '2030-12-25');

Wynik:

+---------------------------------+
| EXTRACT(YEAR FROM '2030-12-25') |
+---------------------------------+
|                            2030 |
+---------------------------------+

Oto kolejny, który wyodrębnia dzień:

SELECT EXTRACT(DAY FROM '2030-12-25');

Wynik:

+--------------------------------+
| EXTRACT(DAY FROM '2030-12-25') |
+--------------------------------+
|                             25 |
+--------------------------------+

Wartości daty i godziny

Działa również z wartościami daty i godziny:

SELECT EXTRACT(HOUR FROM '2030-02-01 10:30:45');

Wynik:

+------------------------------------------+
| EXTRACT(HOUR FROM '2030-02-01 10:30:45') |
+------------------------------------------+
|                                       10 |
+------------------------------------------+

Jednostki daty i czasu

Oto kolejny przykład, który przechodzi przez każdą jednostkę w wyrażeniu daty i godziny:

SELECT 
    EXTRACT(YEAR FROM '2030-02-01 10:30:45.123456') AS YEAR,
    EXTRACT(MONTH FROM '2030-02-01 10:30:45.123456') AS MONTH,
    EXTRACT(DAY FROM '2030-02-01 10:30:45.123456') AS DAY,
    EXTRACT(HOUR FROM '2030-02-01 10:30:45.123456') AS HOUR,
    EXTRACT(MINUTE FROM '2030-02-01 10:30:45.123456') AS MINUTE,
    EXTRACT(SECOND FROM '2030-02-01 10:30:45.123456') AS SECOND,
    EXTRACT(MICROSECOND FROM '2030-02-01 10:30:45.123456') AS MICROSECOND;

Wynik:

+------+-------+------+------+--------+--------+-------------+
| YEAR | MONTH | DAY  | HOUR | MINUTE | SECOND | MICROSECOND |
+------+-------+------+------+--------+--------+-------------+
| 2030 |     2 |    1 |   10 |     30 |     45 |      123456 |
+------+-------+------+------+--------+--------+-------------+

Jednostki złożone

Oto przykład, który używa jednostki złożonej. Jednostki złożone składają się z wielu jednostek czasu podstawowego.

SELECT EXTRACT(YEAR_MONTH FROM '2030-02-01');

Wynik:

+---------------------------------------+
| EXTRACT(YEAR_MONTH FROM '2030-02-01') |
+---------------------------------------+
|                                203002 |
+---------------------------------------+

Zero jednostek

Zero jednostek daje w wyniku 0 .

Przykład:

SELECT 
    EXTRACT(YEAR FROM '0000-00-00 00:00:00.000000') AS YEAR,
    EXTRACT(MONTH FROM '0000-00-00 00:00:00.000000') AS MONTH,
    EXTRACT(DAY FROM '0000-00-00 00:00:00.000000') AS DAY,
    EXTRACT(HOUR FROM '0000-00-00 00:00:00.000000') AS HOUR,
    EXTRACT(MINUTE FROM '0000-00-00 00:00:00.000000') AS MINUTE,
    EXTRACT(SECOND FROM '0000-00-00 00:00:00.000000') AS SECOND,
    EXTRACT(MICROSECOND FROM '0000-00-00 00:00:00.000000') AS MICROSECOND;

Wynik:

+------+-------+------+------+--------+--------+-------------+
| YEAR | MONTH | DAY  | HOUR | MINUTE | SECOND | MICROSECOND |
+------+-------+------+------+--------+--------+-------------+
|    0 |     0 |    0 |    0 |      0 |      0 |           0 |
+------+-------+------+------+--------+--------+-------------+

Daty numeryczne

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

Przykład

SELECT EXTRACT(MONTH FROM 20301125);

Wynik:

+------------------------------+
| EXTRACT(MONTH FROM 20301125) |
+------------------------------+
|                           11 |
+------------------------------+

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

SELECT EXTRACT(YEAR FROM 301125);

Wynik:

+---------------------------+
| EXTRACT(YEAR FROM 301125) |
+---------------------------+
|                      2030 |
+---------------------------+

Ale bądź ostrożny – MariaDB w zasadzie musi odgadnąć, który jest rok. Oto, co się stanie, jeśli zwiększę rok z 30 do 80:

SELECT EXTRACT(YEAR FROM 801125);

Wynik:

+---------------------------+
| EXTRACT(YEAR FROM 801125) |
+---------------------------+
|                      1980 |
+---------------------------+

W tym przypadku przekazanie 30 zaowocowało 2030 ale przekazując 80 zwrócono 1980 .

Musi też mieć sens jako randka. Oto, co się stanie, jeśli użyję nieprawidłowego dnia:

SELECT EXTRACT(YEAR FROM 20300135);

Wynik:

+-----------------------------+
| EXTRACT(YEAR FROM 20300135) |
+-----------------------------+
|                        NULL |
+-----------------------------+

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 
    EXTRACT(MONTH FROM '2030/06/25'),
    EXTRACT(MONTH FROM '2030,06,25'),
    EXTRACT(MONTH FROM '2030:06:25'),
    EXTRACT(MONTH FROM '2030;06!25');

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

EXTRACT(MONTH FROM '2030/06/25'): 6
EXTRACT(MONTH FROM '2030,06,25'): 6
EXTRACT(MONTH FROM '2030:06:25'): 6
EXTRACT(MONTH FROM '2030;06!25'): 6

Aktualna data

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

SELECT 
    NOW(),
    EXTRACT(MONTH FROM NOW());

Wynik:

+---------------------+---------------------------+
| NOW()               | EXTRACT(MONTH FROM NOW()) |
+---------------------+---------------------------+
| 2021-05-16 10:06:21 |                         5 |
+---------------------+---------------------------+

Nieprawidłowe daty

Po przekazaniu nieprawidłowej daty EXTRACT() zwraca null :

SELECT EXTRACT(YEAR FROM 'Friday');

Wynik:

+-----------------------------+
| EXTRACT(YEAR FROM 'Friday') |
+-----------------------------+
|                        NULL |
+-----------------------------+

Nieprawidłowa jednostka daty/godziny

Po przekazaniu nieprawidłowej jednostki daty/czasu, EXTRACT() zwraca błąd:

SELECT EXTRACT(DECADE FROM '2030-06-25');

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 'DECADE FROM '2030-06-25')' at line 1

Brakujący argument

Wywołanie EXTRACT() bez przekazywania jakichkolwiek argumentów powoduje błąd:

SELECT EXTRACT();

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

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Instalacja offline klastra MariaDB dla CentOS

  2. Jak ADD_MONTHS() działa w MariaDB

  3. Jak DAYOFYEAR() działa w MariaDB

  4. Jak działa TRUNCATE() w MariaDB

  5. Jak BIT_LENGTH() działa w MariaDB