Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

TAHUN () Contoh – MySQL

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'):2045 

Tanggal 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() mengembalikan null :

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 1

Dan 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

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Instal Mtop (Pemantauan Server Database MySQL) di RHEL/CentOS 6/5/4, Fedora 17-12

  2. Cara Membuat Tabel di MySQL Workbench menggunakan GUI

  3. Optimalisasi pencarian MySQL menggunakan like dan wildcard

  4. menampilkan data dari database SQL ke tabel php/html

  5. Simpan Data dalam bahasa Arab di database MySQL