MariaDB
 sql >> Teknologi Basis Data >  >> RDS >> MariaDB

Bagaimana EXTRACT() Bekerja di MariaDB

Di MariaDB, EXTRACT() adalah fungsi tanggal dan waktu bawaan yang mengembalikan unit yang ditentukan dari tanggal atau ekspresi datetime tertentu.

Sintaks

Sintaksnya seperti ini:

EXTRACT(unit FROM date)

Dimana unit adalah unit tanggal dan waktu yang valid, dan date adalah tanggal untuk mengekstrak unit tersebut.

Contoh

Berikut ini contoh yang mengekstrak tahun dari tanggal:

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

Hasil:

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

Ini satu lagi yang mengekstrak hari ini:

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

Hasil:

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

Nilai Tanggal-waktu

Ini juga berfungsi dengan nilai datetime:

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

Hasil:

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

Satuan Tanggal &Waktu

Berikut contoh lain yang berjalan melalui setiap unit dalam ekspresi datetime:

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;

Hasil:

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

Unit Komposit

Berikut adalah contoh yang menggunakan unit komposit. Unit gabungan terdiri dari beberapa unit waktu dasar.

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

Hasil:

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

Unit Nol

Satuan nol menghasilkan 0 .

Contoh:

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;

Hasil:

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

Tanggal Numerik

Dimungkinkan juga untuk melewatkan tanggal sebagai angka, asalkan masuk akal sebagai tanggal.

Contoh

SELECT EXTRACT(MONTH FROM 20301125);

Hasil:

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

Atau bahkan yang berikut (yang menggunakan tahun dua digit):

SELECT EXTRACT(YEAR FROM 301125);

Hasil:

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

Tapi hati-hati di sini – MariaDB pada dasarnya harus menebak tahun berapa itu. Inilah yang terjadi jika saya meningkatkan tahun dari 30 menjadi 80:

SELECT EXTRACT(YEAR FROM 801125);

Hasil:

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

Jadi dalam hal ini, melewati 30 menghasilkan 2030 tetapi melewati 80 mengembalikan 1980 .

Juga, itu harus masuk akal sebagai kencan. Inilah yang terjadi jika saya menggunakan hari yang tidak valid:

SELECT EXTRACT(YEAR FROM 20300135);

Hasil:

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

Pembatas Lainnya

Anda dapat menggunakan pembatas lain untuk tanggal. MariaDB cukup pemaaf dalam hal pembatas tanggal. Berikut adalah beberapa contoh yang valid:

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');

Hasil (menggunakan keluaran vertikal):

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

Tanggal Saat Ini

Kita dapat melewati NOW() sebagai argumen tanggal untuk menggunakan tanggal saat ini:

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

Hasil:

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

Tanggal Tidak Valid

Saat melewati tanggal yang tidak valid, EXTRACT() mengembalikan null :

SELECT EXTRACT(YEAR FROM 'Friday');

Hasil:

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

Satuan Tanggal/Waktu Tidak Valid

Saat melewati unit tanggal/waktu yang tidak valid, EXTRACT() mengembalikan kesalahan:

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

Hasil:

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

Argumen Tidak Ada

Memanggil EXTRACT() tanpa memberikan argumen apa pun menghasilkan kesalahan:

SELECT EXTRACT();

Hasil:

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. MariaDB CURRENT_ROLE() Dijelaskan

  2. Menjalankan Cluster MariaDB Galera Tanpa Alat Orkestrasi - Manajemen Kontainer DB:Bagian Kedua

  3. Menjalankan ProxySQL sebagai Wadah Pembantu di Kubernetes

  4. Bagaimana CHAR_LENGTH() Bekerja di MariaDB

  5. Apa Itu Tabel Temporal MariaDB?