Lihat TIMESTAMPDIFF() fungsi di MySQL.
Apa yang memungkinkan Anda lakukan adalah memasukkan dua TIMESTAMP
atau DATETIME
nilai (atau bahkan DATE
karena MySQL akan mengonversi otomatis) serta unit waktu yang Anda inginkan untuk mendasarkan perbedaan Anda.
Anda dapat menentukan MONTH
sebagai unit dalam parameter pertama:
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
Ini pada dasarnya mendapatkan jumlah bulan yang telah berlalu dari tanggal pertama dalam daftar parameter. Solusi ini memperhitungkan jumlah hari yang bervariasi dalam setiap bulan (28,30,31) serta tahun kabisat.
Jika Anda ingin presisi desimal dalam jumlah bulan yang telah berlalu, ini sedikit lebih rumit, tetapi inilah cara Anda melakukannya:
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
)
Dimana startdate
dan enddate
adalah parameter tanggal Anda, apakah itu dari dua kolom tanggal dalam tabel atau sebagai parameter input dari skrip:
Contoh:
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