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

Różnica w miesiącach między datami w MySQL

Różnica w miesiącu między dowolnymi dwiema datami:

Jestem zaskoczony, że jeszcze o tym nie wspomniano:

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')
-- 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

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

Miesięczna różnica z dokładnością:

To trochę bardziej skomplikowane, jeśli chcesz wprowadzić dokładność dziesiętną w liczbie miesięcy, które upłynęły, 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. Migracja MySQL do PostgreSQL na AWS RDS, część 4

  2. Najlepszy sposób na sprawdzenie, czy wiersz istnieje w tabeli MySQL

  3. Zamów według COUNT za wartość

  4. Uzyskaj nazwy tabel za pomocą instrukcji SELECT w MySQL

  5. Jak wyświetlić wiersze tabeli z bazy danych (php)