Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Ví dụ YEAR () - MySQL

Trong MySQL, YEAR() là một hàm ngày và giờ được tích hợp sẵn trả về năm từ một biểu thức ngày tháng nhất định.

Nó trả về năm dưới dạng một số trong phạm vi 1000 thành 9999 . Đối với các ngày không, nó có thể trả về 0 hoặc NULL có cảnh báo, tùy thuộc vào các giá trị trong sql_mode của bạn .

Cú pháp

Cú pháp như sau:

 YEAR(date) 

Nơi date là biểu thức ngày để lấy năm từ đó.

Ví dụ

Đây là một ví dụ:

 SELECT YEAR('2045-12-10'); 

Kết quả:

 2045 

Giá trị ngày giờ

Nó cũng hoạt động với các giá trị ngày giờ:

 SELECT YEAR('2045-12-10 18:52:17'); 

Kết quả:

 2045 

Zero Dates

Theo tài liệu MySQL, không có ngày nào dẫn đến 0 . Tuy nhiên, kết quả thực tế sẽ phụ thuộc vào giá trị của sql_mode của bạn biến hệ thống.

Theo mặc định, không cho phép ngày tháng và do đó, làm như sau sẽ tạo ra NULL với một cảnh báo:

 SELECT YEAR('0000-00-00'); 

Kết quả:

 + -------------------- + | NĂM ('0000-00-00') | + -------------------- + | NULL | + -------------------- + 1 hàng được đặt, 1 cảnh báo (0,00 giây) 

Và đây là cảnh báo:

 show warnings; 

Kết quả:

 + --------- + ------ + ----------------------------- ----------- + | Mức độ | Mã | Tin nhắn | + --------- + ------ + ------------------------------ ---------- + | Cảnh báo | 1292 | Giá trị ngày giờ không chính xác:'0000-00-00' | + --------- + ------ + -------------------- -------------------- + 

Tôi nhận được cảnh báo này vì sql_mode của tôi biến hệ thống bao gồm NO_ZERO_DATENO_ZERO_IN_DATE :

 SELECT @@SESSION.sql_mode; 

Kết quả:

 ONLY_FULL_GROUP_BY, STRICT_TRANS_TABLES, NO_ZERO_IN_DATE, NO_ZERO_DATE, ERROR_FOR_DIVISION_BY_ZERO, NO_ENGINE_SUBSTITUTION 

Hãy đặt lại sql_mode của tôi không có những giá trị đó:

 SET SESSION sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';
SELECT @@SESSION.sql_mode; 

Kết quả:

 ONLY_FULL_GROUP_BY, STRICT_TRANS_TABLES, ERROR_FOR_DIVISION_BY_ZERO, NO_ENGINE_SUBSTITUTION 

Bây giờ chúng ta hãy chạy YEAR() hoạt động lại với ngày 0:

 SELECT YEAR('0000-00-00'); 

Kết quả:

 0 

Lần này chúng tôi nhận được 0 , theo tài liệu.

Lưu ý rằng NO_ZERO_DATENO_ZERO_IN_DATE không được chấp nhận tại thời điểm viết bài. Do đó, chúng có thể bị xóa bất kỳ lúc nào.

Số ngày

Cũng có thể chuyển ngày tháng dưới dạng số, miễn là ngày tháng có ý nghĩa.

Ví dụ:

 SELECT YEAR(20451210); 

Kết quả:

 2045 

Hoặc thậm chí như sau (sử dụng năm có hai chữ số):

 SELECT YEAR(451210); 

Kết quả:

 2045 

Nhưng nó phải có ý nghĩa như một cuộc hẹn hò. Đây là những gì sẽ xảy ra nếu tôi tăng thời gian trong ngày thành một ngày không hợp lệ:

 SELECT YEAR(20451265); 

Kết quả:

 + ---------------- + | NĂM (20451265) | + ---------------- + | NULL | + ---------------- + 1 hàng được đặt, 1 cảnh báo (0,00 giây) 

Chúng tôi có thể kiểm tra cảnh báo như sau:

 show warnings; 

Kết quả:

 + --------- + ------ + ----------------------------- --------- + | Mức độ | Mã | Tin nhắn | + --------- + ------ + ------------------------------ -------- + | Cảnh báo | 1292 | Giá trị ngày giờ không chính xác:'20451265' | + --------- + ------ + ------------------------ -------------- + 

Các dấu phân cách khác

Bạn có thể sử dụng các dấu phân cách khác cho ngày. MySQL khá dễ dãi khi nói đến dấu phân cách ngày tháng. Dưới đây là một số ví dụ hợp lệ:

 SELECT 
    YEAR('2045/12/10'),
    YEAR('2045,12,10'),
    YEAR('2045:12:10'),
    YEAR('2045;12!10'); 

Kết quả (sử dụng đầu ra dọc):

 NĂM ('2045/12/10'):2045YEAR ('2045,12,10'):2045YEAR ('2045:12:10'):2045YEAR ('2045; 12! 10'):2045  

Ngày hiện tại

Chúng ta có thể chuyển NOW() làm đối số datetime để sử dụng ngày hiện tại:

 SELECT 
    NOW(),
    YEAR(NOW()); 

Kết quả:

 + --------------------- + ------------- + | NGAY BÂY GIỜ () | NĂM (NOW ()) | + --------------------- + ------------- + | 2021-10-17 11:09:23 | Năm 2021 | + --------------------- + ------------- + 

Đối số không hợp lệ

Khi truyền một đối số không hợp lệ, YEAR() trả về null :

 SELECT YEAR('2030-65-78'); 

Kết quả:

 + -------------------- + | NĂM ('2030-65-78') | + -------------------- + | NULL | + -------------------- + 1 hàng được đặt, 1 cảnh báo (0,00 giây) 

Kiểm tra cảnh báo:

 SHOW WARNINGS; 

Kết quả:

 + --------- + ------ + ----------------------------- ----------- + | Mức độ | Mã | Tin nhắn | + --------- + ------ + ------------------------------ ---------- + | Cảnh báo | 1292 | Giá trị ngày giờ không chính xác:'2030-65-78' | + --------- + ------ + -------------------- -------------------- + 

Thiếu đối số

Đang gọi YEAR() với số lượng đối số sai hoặc không chuyển bất kỳ đối số nào, dẫn đến lỗi:

 SELECT YEAR(); 

Kết quả:

 ERROR 1064 (42000):Bạn có lỗi trong cú pháp SQL của mình; kiểm tra hướng dẫn sử dụng tương ứng với phiên bản máy chủ MySQL của bạn để biết cú pháp phù hợp để sử dụng gần ')' tại dòng 1 

Và một ví dụ khác:

 SELECT YEAR('2030-12-10', '2031-12-10'); 

Kết quả:

 ERROR 1064 (42000):Bạn có lỗi trong cú pháp SQL của mình; kiểm tra hướng dẫn sử dụng tương ứng với phiên bản máy chủ MySQL của bạn để biết cú pháp phù hợp để sử dụng gần ',' 2031-12-10 ')' tại dòng 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. Cách chạy máy chủ lưu trữ mysqladmin trên Amazon RDS

  2. Cách định dạng ngày và giờ trong MySQL

  3. MySQL xử lý ORDER BY và LIMIT trong một truy vấn như thế nào?

  4. SYSDATE () so với NOW () trong MySQL:Sự khác biệt là gì?

  5. Di chuyển MySQL sang PostgreSQL trên AWS RDS, Phần 4