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