Mysql
 sql >> база данни >  >> RDS >> Mysql

Разликата в месеците между датите в MySQL

Месечна разлика между дадени две дати:

Изненадан съм, че това все още не е споменато:

Разгледайте TIMESTAMPDIFF() функция в MySQL.

Това, което ви позволява да направите, е да подадете две TIMESTAMP или DATETIME стойности (или дори DATE тъй като MySQL автоматично ще конвертира), както и единицата време, на която искате да базирате разликата си.

Можете да посочите MONTH като единица в първия параметър:

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

По принцип получава броя на месеците, изминали от първата дата в списъка с параметри. Това решение автоматично компенсира различното количество дни във всеки месец (28,30,31), както и взема предвид високосните години — не е нужно да се притеснявате за тези неща.

Месечна разлика с точност:

Малко по-сложно е, ако искате да въведете десетична точност в броя на изминалите месеци, но ето как можете да го направите:

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
  )

Където startdate и enddate са вашите параметри за дата, независимо дали са от две колони за дата в таблица или като входни параметри от скрипт:

Примери:

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. Специални символи в PHP / MySQL

  2. Урок за MySQL:MySQL IN изявление (разширено)

  3. Използване на ORDER BY и GROUP BY заедно

  4. Конфигурация на MySQL 8

  5. Как мога да импортирам база данни с MySQL от терминал?