Perbedaan bulan antara dua tanggal tertentu:
Saya terkejut ini belum disebutkan:
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')
-- 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
Ini pada dasarnya mendapatkan jumlah bulan yang telah berlalu dari tanggal pertama dalam daftar parameter. Solusi ini secara otomatis mengkompensasi jumlah hari yang bervariasi dalam setiap bulan (28,30,31) serta memperhitungkan tahun kabisat — Anda tidak perlu khawatir tentang hal itu.
Perbedaan bulan dengan presisi:
Ini sedikit lebih rumit jika Anda ingin memperkenalkan presisi desimal dalam jumlah bulan yang telah berlalu, 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