Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Jak obliczyć różnicę między dwiema datami w miesiącach w MySQL?

Spójrz na TIMESTAMPDIFF() funkcja w MySQL.

To, co pozwala ci to zrobić, to przekazać w dwóch TIMESTAMP lub DATETIME wartości (lub nawet DATE ponieważ MySQL dokona automatycznej konwersji), a także jednostkę czasu, na której chcesz oprzeć swoją różnicę.

Możesz określić MONTH jako jednostka w pierwszym parametrze:

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

Zasadniczo pobiera liczbę miesięcy, które upłynęły od pierwszej daty na liście parametrów. To rozwiązanie uwzględnia różną liczbę dni w każdym miesiącu (28,30,31), a także lata przestępne.

Jeśli potrzebujesz dokładności dziesiętnej w liczbie miesięcy, które upłynęły, jest to trochę bardziej skomplikowane, ale oto, jak możesz to zrobić:

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
  )

Gdzie startdate i enddate są twoimi parametrami daty, niezależnie od tego, czy pochodzą z dwóch kolumn dat w tabeli, czy jako parametry wejściowe ze skryptu:

Przykłady:

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. Najważniejsze błędy, których należy unikać podczas replikacji MySQL

  2. Metoda haszowania hasła Mysql stara vs nowa

  3. jak używać LIKE z nazwą kolumny

  4. Wstawianie listy zawierającej wiele wartości w MySQL za pomocą pymysql

  5. Czy Markdown (z strip_tags) wystarczy do powstrzymania ataków XSS?