Bagaimana Cara Menghitung Selisih Bulan di MySQL?

Dibuat
·
Dilihat37 kali
0

Bagaimana cara menghitung selisih bulan di MySQL, jadi ketika saya select ada kolom baru bernama selisih_bulan yang didasarkan pada selisih bulan antara kolom startAt dengan endAt, bagaimana caranya ya?

ini tabel saya:

mysql> select * from subscription;
+----+---------------------+---------------------+
| id | startAt             | endAt               |
+----+---------------------+---------------------+
|  1 | 2023-01-02 00:00:00 | 2023-03-20 00:00:00 |
|  2 | 2023-03-20 00:00:00 | 2023-06-20 00:00:00 |
|  3 | 2023-04-11 00:00:00 | 2023-09-20 00:00:00 |
+----+---------------------+---------------------+
1 Jawaban
0

Bisa pakai fungsi TIMESTAMPDIFF().

Fungsi ini akan mengembalikan jumlah bulan yang sudah berlalu, otomatis mengkompensasi jumlah hari yang bervariasi dalam setiap bulan (28,30,31) serta memperhitungkan tahun kabisat, jadi gak perlu khawatir soal hal-hal tersebut.

Kalau untuk kasus seperti yang ditanyakan, bisa pakai ini:

mysql> SELECT *, TIMESTAMPDIFF(MONTH, startAt, endAt) AS selisih_bulan FROM subscription;
+----+---------------------+---------------------+---------------+
| id | startAt             | endAt               | selisih_bulan |
+----+---------------------+---------------------+---------------+
|  1 | 2023-01-02 00:00:00 | 2023-03-20 00:00:00 |             2 |
|  2 | 2023-03-20 00:00:00 | 2023-06-20 00:00:00 |             3 |
|  3 | 2023-04-11 00:00:00 | 2023-09-20 00:00:00 |             5 |
+----+---------------------+---------------------+---------------+

Kalau mau mendapatkan selisih bulan secara presisi (dengan desimal), bisa menggunakan gabungan fungsi TIMESTAMPDIFF() dan DATEDIFF() seperti ini:

SELECT 
*,
(
  TIMESTAMPDIFF(MONTH, startAt, endAt) +
    DATEDIFF(
      endAt,
      startAt + INTERVAL
        TIMESTAMPDIFF(MONTH, startAt, endAt)
      MONTH
    ) /
    DATEDIFF(
      startAt + INTERVAL
        TIMESTAMPDIFF(MONTH, startAt, endAt) + 1
      MONTH,
      startAt + INTERVAL
        TIMESTAMPDIFF(MONTH, startAt, endAt)
      MONTH
    )
) as selisih_bulan
FROM subscription;

hasil:

+----+---------------------+---------------------+---------------+
| id | startAt             | endAt               | selisih_bulan |
+----+---------------------+---------------------+---------------+
|  1 | 2023-01-02 00:00:00 | 2023-03-20 00:00:00 |        2.5806 |
|  2 | 2023-03-20 00:00:00 | 2023-06-20 00:00:00 |        3.0000 |
|  3 | 2023-04-11 00:00:00 | 2023-09-20 00:00:00 |        5.3000 |
+----+---------------------+---------------------+---------------+
Dibuat

Kamu tau jawabannya?

Ayo bergabung bersama lebih dari 200.000 pengguna lainnya!