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

Sự khác biệt về tháng giữa các ngày trong MySQL

Chênh lệch hàng tháng giữa hai ngày nhất định bất kỳ:

Tôi ngạc nhiên là điều này vẫn chưa được đề cập đến:

Hãy xem TIMESTAMPDIFF () trong MySQL.

Điều này cho phép bạn làm là chuyển hai TIMESTAMP hoặc DATETIME giá trị (hoặc thậm chí DATE vì MySQL sẽ tự động chuyển đổi) cũng như đơn vị thời gian bạn muốn dựa vào sự khác biệt của mình.

Bạn có thể chỉ định MONTH làm đơn vị trong tham số đầu tiên:

SELECT TIMESTAMPDIFF(MONTH, '2012-05-05', '2012-06-04')
-- Outputs: 0
SELECT TIMESTAMPDIFF(MONTH, '2012-05-05', '2012-06-05')
-- Outputs: 1
SELECT TIMESTAMPDIFF(MONTH, '2012-05-05', '2012-06-15')
-- Outputs: 1
SELECT TIMESTAMPDIFF(MONTH, '2012-05-05', '2012-12-16')
-- Outputs: 7

Về cơ bản, nó lấy số tháng trôi qua kể từ ngày đầu tiên trong danh sách tham số. Giải pháp này tự động bù đắp lượng ngày khác nhau trong mỗi tháng (28,30,31) cũng như tính đến các năm nhuận - bạn không phải lo lắng về bất kỳ điều gì trong số đó.

Chênh lệch hàng tháng với độ chính xác:

Sẽ phức tạp hơn một chút nếu bạn muốn giới thiệu độ chính xác thập phân theo số tháng đã trôi qua, nhưng đây là cách bạn có thể làm điều đó:

SELECT 
  TIMESTAMPDIFF(MONTH, startdate, enddate) +
  DATEDIFF(
    enddate,
    startdate + INTERVAL
      TIMESTAMPDIFF(MONTH, startdate, enddate)
    MONTH
  ) /
  DATEDIFF(
    startdate + INTERVAL
      TIMESTAMPDIFF(MONTH, startdate, enddate) + 1
    MONTH,
    startdate + INTERVAL
      TIMESTAMPDIFF(MONTH, startdate, enddate)
    MONTH
  )

Nơi startdateenddate là các tham số ngày của bạn, cho dù đó là từ hai cột ngày trong bảng hay dưới dạng tham số đầu vào từ tập lệnh:

Ví dụ:

With startdate = '2012-05-05' AND enddate = '2012-05-27':
-- Outputs: 0.7097
With startdate = '2012-05-05' AND enddate = '2012-06-13':
-- Outputs: 1.2667
With startdate = '2012-02-27' AND enddate = '2012-06-02':
-- Outputs: 3.1935


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Triển khai Nhận xét và Thích trong cơ sở dữ liệu

  2. MySQL COALESCE () Giải thích

  3. MySQL TẢI THÔNG TIN DỮ LIỆU với CẬP NHẬT KHÓA DUPLICATE

  4. Cách định dạng số trong MySQL

  5. Không thể thực hiện kết nối vì máy đích đã chủ động từ chối nó (PHP / WAMP)