Di MySQL, YEAR()
adalah fungsi tanggal dan waktu bawaan yang mengembalikan tahun dari ekspresi tanggal tertentu.
Ini mengembalikan tahun sebagai angka dalam kisaran 1000
ke 9999
. Untuk tanggal nol, itu bisa mengembalikan 0
atau NULL
dengan peringatan, tergantung pada nilai dalam sql_mode
Anda .
Sintaks
Sintaksnya seperti ini:
YEAR(date)
Dimana date
adalah ekspresi tanggal untuk mendapatkan tahun.
Contoh
Ini contohnya:
SELECT YEAR('2045-12-10');
Hasil:
2045
Nilai Tanggal-waktu
Ini juga berfungsi dengan nilai datetime:
SELECT YEAR('2045-12-10 18:52:17');
Hasil:
2045
Tanggal Nol
Menurut dokumentasi MySQL, tanggal nol menghasilkan 0
. Namun, hasil sebenarnya akan tergantung pada nilai sql_mode
Anda variabel sistem.
Secara default, tanggal nol tidak diperbolehkan, dan oleh karena itu, melakukan hal berikut menghasilkan NULL
dengan peringatan:
SELECT YEAR('0000-00-00');
Hasil:
+--------------------+| TAHUN('0000-00-00') |+--------------------+| NULL |+--------------------+1 baris di set, 1 peringatan (0,00 detik)
Dan inilah peringatannya:
show warnings;
Hasil:
+---------+------+----------------------------- -----------+| tingkat | Kode | Pesan |+---------+-------+--------------------------------------- ----------+| Peringatan | 1292 | Nilai datetime salah:'0000-00-00' |+---------+------+-------------------- --------------------+
Saya mendapat peringatan ini karena sql_mode
saya variabel sistem termasuk NO_ZERO_DATE
dan NO_ZERO_IN_DATE
:
SELECT @@SESSION.sql_mode;
Hasil:
ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
Mari kita reset sql_mode
saya tanpa nilai tersebut:
SET SESSION sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';
SELECT @@SESSION.sql_mode;
Hasil:
ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
Sekarang mari kita jalankan YEAR()
berfungsi lagi dengan tanggal nol:
SELECT YEAR('0000-00-00');
Hasil:
0
Kali ini kita mendapatkan 0
, sesuai dengan dokumentasi.
Perhatikan bahwa NO_ZERO_DATE
dan NO_ZERO_IN_DATE
tidak digunakan lagi pada saat penulisan. Oleh karena itu, mereka dapat dihapus kapan saja.
Tanggal Numerik
Dimungkinkan juga untuk melewatkan tanggal sebagai angka, asalkan masuk akal sebagai tanggal.
Contoh:
SELECT YEAR(20451210);
Hasil:
2045
Atau bahkan yang berikut (yang menggunakan tahun dua digit):
SELECT YEAR(451210);
Hasil:
2045
Tapi itu harus masuk akal sebagai kencan. Inilah yang terjadi jika saya menambah bagian hari menjadi hari yang tidak valid:
SELECT YEAR(20451265);
Hasil:
+----------------+| TAHUN (20451265) |+----------------+| NULL |+----------------+1 baris di set, 1 peringatan (0,00 detik)
Kita dapat memeriksa peringatan seperti ini:
show warnings;
Hasil:
+---------+------+----------------------------- ---------+| tingkat | Kode | Pesan |+---------+-------+--------------------------------------- --------+| Peringatan | 1292 | Nilai datetime salah:'20451265' |+---------+------+------------------------ --------------+
Pembatas Lainnya
Anda dapat menggunakan pembatas lain untuk tanggal. MySQL cukup memaafkan dalam hal pembatas pada tanggal. Berikut adalah beberapa contoh yang valid:
SELECT
YEAR('2045/12/10'),
YEAR('2045,12,10'),
YEAR('2045:12:10'),
YEAR('2045;12!10');
Hasil (menggunakan keluaran vertikal):
YEAR('2045/12/10'):2045YEAR('2045,12,10'):2045YEAR('2045:12:10'):2045YEAR('2045;12!10'):2045Tanggal Saat Ini
Kita dapat melewati
NOW()
sebagai argumen datetime untuk menggunakan tanggal saat ini:SELECT NOW(), YEAR(NOW());
Hasil:
+---------------------+-------------+| SEKARANG() | TAHUN(SEKARANG()) |+---------------------+-------------+| 2021-10-17 11:09:23 | 2021 |+---------------------+-------------+Argumen Tidak Valid
Saat melewati argumen yang tidak valid,
YEAR()
mengembalikannull
:SELECT YEAR('2030-65-78');
Hasil:
+--------------------+| TAHUN('2030-65-78') |+------+| NULL |+--------------------+1 baris di set, 1 peringatan (0,00 detik)Periksa peringatannya:
SHOW WARNINGS;
Hasil:
+---------+------+----------------------------- -----------+| tingkat | Kode | Pesan |+---------+-------+--------------------------------------- ----------+| Peringatan | 1292 | Nilai datetime salah:'2030-65-78' |+---------+------+-------------------- --------------------+Argumen Tidak Ada
Memanggil
YEAR()
dengan jumlah argumen yang salah, atau tanpa memberikan argumen apa pun, menghasilkan kesalahan:SELECT YEAR();
Hasil:
ERROR 1064 (42000):Anda memiliki kesalahan dalam sintaks SQL Anda; periksa manual yang sesuai dengan versi server MySQL Anda untuk sintaks yang tepat untuk digunakan di dekat ')' di baris 1Dan contoh lain:
SELECT YEAR('2030-12-10', '2031-12-10');
Hasil:
ERROR 1064 (42000):Anda memiliki kesalahan dalam sintaks SQL Anda; periksa manual yang sesuai dengan versi server MySQL Anda untuk sintaks yang tepat untuk digunakan di dekat ', '2031-12-10')' di baris 1