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

Как да изчислим разликата между две дати в месеци в MySQL

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

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

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

SELECT TIMESTAMPDIFF(MONTH, '2012-05-05', '2012-06-04')
-- 0
SELECT TIMESTAMPDIFF(MONTH, '2012-05-05', '2012-06-05')
-- 1
SELECT TIMESTAMPDIFF(MONTH, '2012-05-05', '2012-06-15')
-- 1
SELECT TIMESTAMPDIFF(MONTH, '2012-05-05', '2012-12-16')
-- 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. Codeigniter транзакции

  2. Как работи memcache с MySQL?

  3. Извличане на всички редове от миналия месец (Laravel + Eloquent)

  4. Външен ключ с няколко колони в MySQL?

  5. Laravel Eloquent получава резултати, групирани по дни