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

ngày chuyển đổi mysql thành cùng ngày của năm hiện tại

Câu trả lời của Khalid hầu hết đều đúng. Năm nhuận làm mọi thứ rối tung lên! Ví dụ:nếu bạn chạy truy vấn được đề xuất trong đó giá trị của datecol là '2016-02-29' và CURRENT_DATE là '2017-01-01', bạn nhận được null .

Một cách thay thế để làm điều này giúp xử lý năm nhuận một cách duyên dáng hơn là như sau:

SELECT DATE_FORMAT(
    MAKEDATE(YEAR(CURRENT_DATE()), DAYOFYEAR(datecol)),
    '%Y-%m-%d'
) `date`
FROM t

Giá trị của date đây sẽ là 2017-03-01.

Chỉnh sửa / làm rõ:Vấn đề là việc thay đổi năm '2016-02-29' thành 2017, chẳng hạn như '2017-02-29', không phải là ngày hợp lệ. Sau đó, chạy DATE_FORMAT ('2017-02-29', '% Y-% m-% d') cho kết quả là null . Bản demo của vấn đề ở đây:

http://sqlfiddle.com/#!9/c5358/11

Tuy nhiên, sau khi xem lại câu trả lời của mình, tôi nhận ra rằng tôi gặp một vấn đề khác khi sử dụng MAKEDATE vì bất kỳ ngày nào trong năm nhuận sau ngày 28 tháng 2 là ngày + 1 cho một năm "bình thường" có 365 ngày. Ví dụ:nếu datecol ='2016-03-01' và năm hiện tại là 2017 thì ngày chuyển đổi sẽ là '2017-03-02', không phải '2017-03-01' như mong muốn. Một cách tiếp cận tốt hơn như sau:

SELECT
DATE_FORMAT(DATE_ADD(datecol, INTERVAL (YEAR(CURRENT_DATE()) - YEAR(datecol)) YEAR), '%Y-%m-%d') `date`
FROM t;

Phương pháp này biến bất kỳ ngày 29 tháng 2 thành ngày 28 và nếu không sẽ giữ tất cả các ngày khác chính xác như bạn mong đợi. Bản demo của giải pháp ở đây:

http://sqlfiddle.com/#!9/c5358/12



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm thế nào để tính tổng của hai cột từ hai bảng khác nhau mà không có mệnh đề where?

  2. PHP Lưu phiên trong cơ sở dữ liệu. Phương pháp đọc dường như không hoạt động

  3. Lấy dữ liệu hàng của hàng đã chèn (Mysql, PHP, mysqli)

  4. Truy vấn 2 Bảng trong một truy vấn

  5. Hiển thị hình ảnh trong Wordpress với mã PHP