Menghitung Rentang Usia dan Waktu di MySQL

Original by Marko Klaric on Pexels
{tocify} $title={Daftar Isi}

Pendahuluan

Umumnya untuk menyimpan data berupa tanggal di mysql kita dapat menggunakan tipe data date, adapun tipe data lain yang termasuk untuk menyimpan data berupa penanggalan seperti year, month dsb. Berdasarkan tipe data date yang tersedia kita tidak dapat menyimpan data usia secara langsung di MySQL kalaupun bisa maka kita akan menggunakan tipe data char, varchar ataupun int namun penggunaan tipe data char, varhcar dan integer dirasa kurang tepat karena bisa saja user salah input sehingga mendapati data usia yang tidak sesuai dengan tahun lahir seseorang.

Lalu bagaimana cara untuk menghitung usia di MySQL? Cara untuk menghitung data usia di MySQL adalah dengan tetap menggunakan tipe data date yang menyimpan tanggal lahir seseorang dan untuk menampilkan data usianya adalah dengan menggunakan fungsi date timestampdiff.

Timestampdiff

Fungsi timestampdiff digunakan untuk membandingkan dua tanggal atau ekspresi datetime berupa mikro detik, detik, menit, jam, hari, minggu, kuartal, bulan, dan tahun dan mengembalikannya sebagai rentang waktu dari kedua tanggal atau datetime setelah mengurangi ekspresi datetime yang lain, agar lebih memahaminya, berikut adalah format dasar dan contohnya:

Format dasar:

select timestampdiff(unit, expression_1, expression_2) [as nama_alias] from nama_tabel;

Keterangan:
Unit : merupakan satuan yang dipakai untuk menghitung selisih waktu yang diinginkan. Adapun daftar unit yang dapat digunakan adalah:
  • Microsecond
  • Second
  • Minute
  • Hour
  • Day
  • Week
  • Month
  • Quarter
  • Year
expression 1 : adalah nilai pertama yang ingin dihasilkan
expression 2 : adalah nilai kedua yang akan menghitung rentang waktu dengan expression 1

Contoh:

mysql> select 
  concat(
    timestampdiff(day, "1995-05-12", "1997-01-01"), 
    " Hari"
  ) as "Rentang Hari", 
  concat(
    timestampdiff(week, "1995-05-12", "1997-01-01"), 
    " Minggu"
  ) as "Rentang Minggu", 
  concat(
    timestampdiff(
      month, "1995-05-12", "1997-01-01"
    ), 
    " Bulan"
  ) as "Rentang Bulan", 
  concat(
    timestampdiff(year, "1995-05-12", "1997-01-01"), 
    " Tahun"
  ) as "Rentang Tahun";

+--------------+----------------+---------------+---------------+
| Rentang Hari | Rentang Minggu | Rentang Bulan | Rentang Tahun |
+--------------+----------------+---------------+---------------+
| 600 Hari     | 85 Minggu      | 19 Bulan      | 1 Tahun       |
+--------------+----------------+---------------+---------------+
1 row in set (0.07 sec)

--Jika Expression_1 lebih kecil dari Expression_2
mysql> select concat(timestampdiff(year, "1998-05-12", "1997-01-01"), " Tahun") as "Rentang Waktu";
+---------------+
| Rentang Waktu |
+---------------+
| -1 Tahun      |
+---------------+
1 row in set (0.00 sec)

--Contoh dengan tabel
mysql> select 
  nama, 
  t_lahir, 
  timestampdiff(year, t_lahir, now()) as Usia 
from 
  mahasiswa 
limit 5;

+----------------+------------+------+
| nama           | t_lahir    | Usia |
+----------------+------------+------+
| AA Aditya A    | 1996-09-03 |   25 |
| A Aditya A     | 1996-06-03 |   25 |
| A Dimas A      | 1998-08-03 |   23 |
| A Faisal Dimas | 1995-02-23 |   26 |
| A Faridah Nur  | 1995-03-13 |   26 |
+----------------+------------+------+
5 rows in set (0.82 sec)

Pada contoh diatas data usia didapati dengan menggunakan fungsi timestampdiff dimana fungsi tersebut akan melakukan pengurangan pada expression_2 - expression_1 dengan berdasarkan unit yang digunakan, untuk itu nilai atau tanggal pada expression_2 harus lebih besar dari expression_1 sehingga tidak menghasilkan minus.

Menghitung Rentang Waktu:

Selain digunakan untuk menghitung rentang usia (hari, bulan, ataupun tahun), timestampdiff juga dapat menghasilkan rentang waktu seperti, mikro detik, detik, menit, dan jam, contohnya sebagai berikut:

mysql> select concat(timestampdiff(microsecond, "2022-01-16 11:00:00", "2022-01-16 12:00:00"), " Mikro") as "Rentang MD",
    -> concat(timestampdiff(second, "2022-01-16 11:00:00", "2022-01-16 12:00:00"), " Detik") as "Rentang Detik",
    -> concat(timestampdiff(minute, "2022-01-16 11:00:00", "2022-01-16 12:00:00"), " Menit") as "Rentang Menit",
    -> concat(timestampdiff(hour, "2022-01-16 11:00:00", "2022-01-16 12:00:00"), " Jam") as "Rentang Jam";
+------------------+---------------+---------------+-------------+
| Rentang MD       | Rentang Detik | Rentang Menit | Rentang Jam |
+------------------+---------------+---------------+-------------+
| 3600000000 Mikro | 3600 Detik    | 60 Menit      | 1 Jam       |
+------------------+---------------+---------------+-------------+
1 row in set (0.00 sec)

Namun jika kita tidak menggunakan waktu disalah satu expression maka akan dimulai dari waktu 00:00:00:0000, sebagaimana contoh berikut:

mysql> select concat(timestampdiff(minute, "2022-01-16", "2022-01-16 12:00:00"), " Menit") as "Rentang Menit",
    -> concat(timestampdiff(hour, "2022-01-16", "2022-01-16 12:00:00"), " Jam") as "Rentang Jam";
+---------------+-------------+
| Rentang Menit | Rentang Jam |
+---------------+-------------+
| 720 Menit     | 12 Jam      |
+---------------+-------------+
1 row in set (0.00 sec)
Bayu Radityo

Seorang lulusan teknik informatika yang senang dalam berbagi ilmu pengetahuan, dan membuat karya digital berupa photomanipulation dan digital drawing. instagram external-link

Posting Komentar

Lebih baru Lebih lama