Fungsi TIME() Pada MySql
MySQL adalah salah satu sistem manajemen basis data (DBMS) yang paling populer dan banyak digunakan untuk mengelola,
menyimpan, dan memanipulasi data. MySQL menyediakan beragam fungsi bawaan (built-in functions) yang sangat membantu
dalam pekerjaan sehari-hari pengembang, salah satunya adalah TIME()
. Fungsi ini bisa kita manfaatkan untuk
menangani data yang berkaitan dengan waktu (time-only), seperti jam buka dan tutup toko, jam kerja pegawai, durasi acara,
dan lain-lain.
Pada artikel ini, kita akan membahas secara santai namun detail tentang apa itu fungsi TIME()
, bagaimana
cara menggunakannya, dan berbagai contoh kasus yang sering ditemui dalam dunia pengembangan aplikasi berbasis MySQL.
Artikel ini juga akan memuat tips dan trik yang bisa kamu gunakan untuk memaksimalkan fungsi TIME()
beserta beberapa fungsi terkait lainnya.
Apa Itu Fungsi TIME()
di MySQL?
Secara sederhana, TIME()
dalam MySQL adalah sebuah fungsi yang berfungsi untuk
mengubah atau mengekstrak nilai waktu dari tipe data atau ekspresi tertentu menjadi format
HH:MM:SS
(jam, menit, dan detik). Walaupun kita bisa menyimpan nilai tanggal dan waktu
dalam kolom bertipe DATETIME
atau TIMESTAMP
, sering kali kita hanya perlu bagian jam (time) saja,
misalnya untuk mencatat jam mulai dan jam selesai. Di saat inilah TIME()
menjadi berguna.
Berikut adalah bentuk umum (sintaks) dari fungsi TIME()
:
TIME(expr)
Di mana expr
bisa berupa nilai tipe DATETIME
, TIMESTAMP
, TIME
,
atau bahkan string tanggal dan waktu yang valid. Nilai yang dikembalikan oleh fungsi ini adalah tipe
TIME
dengan format bawaan 'HH:MM:SS'
.
Perbedaan TIME()
Dengan Fungsi Lain Terkait Waktu
Sebelum kita melangkah ke contoh konkret, ada baiknya kita pahami perbedaan antara TIME()
dan beberapa
fungsi lain yang juga berkaitan dengan jam atau waktu:
CURTIME()
: Mengembalikan waktu saat ini (jam, menit, dan detik) sesuai dengan waktu sistem. Misalnya, jika dijalankan pada pukul 15:25:10, maka hasilnya'15:25:10'
.NOW()
: Mengembalikan tanggal dan waktu saat ini, misalnya'2025-02-27 15:25:10'
.TIME_TO_SEC()
: Mengkonversi nilaiTIME
menjadi jumlah detik. Misalnya,TIME_TO_SEC('01:30:00')
akan menghasilkan5400
detik.SEC_TO_TIME()
: Fungsi kebalikan dariTIME_TO_SEC()
, mengkonversi jumlah detik menjadi format waktu'HH:MM:SS'
.HOUR()
,MINUTE()
,SECOND()
: Masing-masing mengembalikan jam, menit, dan detik dari suatu nilaiTIME
atauDATETIME
.
Dari daftar di atas, TIME()
memiliki peran spesifik untuk mengambil bagian waktu (jam, menit, dan detik)
dari suatu ekspresi yang lebih besar (misal dari DATETIME
) atau memformat nilai yang awalnya string menjadi
tipe TIME
jika MySQL dapat mengenalinya.
Contoh Penggunaan Dasar
Untuk memulai, mari kita lihat contoh sederhana. Misalkan kita memiliki kolom datetime_col
bertipe
DATETIME
yang menyimpan data tanggal dan waktu. Kita ingin hanya mengambil bagian jam, menit, dan detiknya
saja. Kita bisa menggunakan TIME()
sebagai berikut:
SELECT TIME(datetime_col) AS hanya_waktu
FROM tabel_log;
Hasilnya akan menampilkan nilai waktu dalam format HH:MM:SS
untuk setiap baris data. Jika
datetime_col
bernilai '2025-02-27 09:45:30'
, maka kolom hanya_waktu
akan menampilkan
'09:45:30'
.
Seandainya kita memiliki data string '2025-02-27 09:45:30'
tanpa tipe DATETIME
,
kita tetap bisa menggunakan TIME()
seperti ini:
SELECT TIME('2025-02-27 09:45:30') AS waktu;
Perintah di atas akan mengembalikan '09:45:30'
. Hal ini karena MySQL akan mencoba memahami string
datetime tersebut secara otomatis dan mengambil bagian jam, menit, dan detiknya.
Penyimpanan Waktu dalam Kolom TIME
Kadang-kadang kita hanya memerlukan kolom yang khusus menyimpan data jam saja, tanpa perlu informasi tanggal.
Misalnya, untuk menyimpan jam buka toko (open_time
) dan jam tutup toko (close_time
),
kita bisa menggunakan tipe data TIME
. Contohnya dalam definisi tabel:
CREATE TABLE jadwal_toko (
id INT AUTO_INCREMENT PRIMARY KEY,
nama_toko VARCHAR(100),
open_time TIME,
close_time TIME
);
Pada tabel jadwal_toko
di atas, kita hanya menyimpan jam (beserta menit dan detik jika dibutuhkan)
untuk memudahkan penyimpanan dan query. Kemudian kita bisa memasukkan data seperti ini:
INSERT INTO jadwal_toko (nama_toko, open_time, close_time)
VALUES
('Toko A', '09:00:00', '17:00:00'),
('Toko B', '08:30:00', '16:30:00');
Selanjutnya, kita dapat melakukan query untuk melihat semua waktu buka dan tutup:
SELECT nama_toko, open_time, close_time
FROM jadwal_toko;
Hasilnya akan menampilkan kolom open_time
dan close_time
dalam format HH:MM:SS
.
Perlu diperhatikan bahwa walau kolom ini menyimpan waktu, TIME()
dalam format 24 jam tetap
didukung oleh MySQL (misalnya '23:59:59'
).
Contoh Perhitungan Interval Waktu
Seringkali, kita tidak hanya menampilkan waktu, tetapi juga melakukan kalkulasi seperti selisih waktu.
Meskipun TIME()
tidak secara langsung menghitung selisih waktu, kita bisa memanfaatkan fungsi-fungsi
MySQL lainnya untuk ini. Tapi, kita tetap bisa mengombinasikan TIME()
dengan fungsi lain guna
memastikan formatnya sesuai.
Misal, kita memiliki dua kolom check_in
dan check_out
yang bertipe DATETIME
.
Kita ingin menghitung durasi (dalam jam, menit, detik) antara dua waktu tersebut, sekaligus menampilkannya
dalam format TIME
. Maka kita bisa menggunakan fungsi TIMEDIFF()
:
SELECT
TIME(TIMEDIFF(check_out, check_in)) AS durasi
FROM absensi_karyawan;
Fungsi TIMEDIFF()
mengembalikan hasil selisih waktu, dan kita bungkus lagi dengan TIME()
untuk memastikan hasilnya ada dalam format HH:MM:SS
. Ini bisa sangat membantu, misalnya untuk
mengetahui berapa lama seseorang berada di kantor atau berapa lama sebuah ruangan disewa.
Penerapan TIME()
Dalam Kasus Praktis
1. Mengambil Waktu dari DATETIME
untuk Keperluan Pelaporan
Bayangkan kita memiliki tabel transaksi
dengan kolom waktu_transaksi
bertipe
DATETIME
. Kita ingin membuat laporan yang lebih rapi di mana bagian tanggal dan waktu
ditampilkan terpisah. Kita bisa melakukan query seperti ini:
SELECT
DATE(waktu_transaksi) AS tanggal_transaksi,
TIME(waktu_transaksi) AS jam_transaksi,
total_pembayaran
FROM transaksi;
Dengan demikian, output query akan menyajikan dua kolom terpisah: tanggal_transaksi
(misal
2025-02-27
) dan jam_transaksi
(misal 14:10:30
).
Hal ini memudahkan pengolahan data lebih lanjut di aplikasi front-end atau laporan.
2. Validasi Jam Masuk dan Jam Keluar
Jika aplikasi kita mengharuskan input jam masuk dan jam keluar yang valid, kita bisa memanfaatkan tipe data
TIME
di kolom basis data, lalu menggunakan TIME()
untuk memformat atau menvalidasi
input yang beragam. Sebagai contoh, ketika user memasukkan data dalam format HH:MM
saja
(tanpa detik), MySQL masih dapat memahaminya seperti TIME('08:30')
yang secara otomatis
akan dibaca sebagai '08:30:00'
.
Lalu, jika kita ingin melakukan pengecekan bahwa jam masuk tidak lebih besar dari jam keluar,
kita bisa menggunakan perbandingan kolom TIME
langsung di MySQL:
SELECT *
FROM absensi
WHERE jam_masuk > jam_keluar;
Jika ada baris yang muncul, berarti ada data yang tidak valid (misalnya jam masuk ternyata lebih telat
daripada jam keluar). Dalam kasus real, kita akan melakukan validasi di level aplikasi,
tapi ini sekadar contoh bahwa tipe TIME
dan fungsi TIME()
sangat fleksibel digunakan.
3. Mengelompokkan Data Berdasarkan Jam Tertentu
Mungkin kita punya kebutuhan untuk menghitung jumlah transaksi yang terjadi di tiap jam,
sehingga kita perlu mengelompokkan data berdasarkan jam. Kita bisa mengekstrak jam saja
menggunakan HOUR()
dan menampilkannya dengan TIME()
jika ingin format tertentu.
Contohnya:
SELECT
HOUR(waktu_transaksi) AS jam_ke,
COUNT(*) AS total_transaksi
FROM transaksi
GROUP BY jam_ke;
Hasilnya akan menunjukkan misalnya jam_ke
= 8, total transaksi 20; jam_ke
= 9, total transaksi 15,
dan seterusnya. Jika kita ingin menampilkan jam secara rapi dalam format TIME
(misalnya 08:00:00
),
kita bisa melakukan sedikit trik dengan SEC_TO_TIME()
:
SELECT
SEC_TO_TIME(HOUR(waktu_transaksi) * 3600) AS jam_time,
COUNT(*) AS total_transaksi
FROM transaksi
GROUP BY HOUR(waktu_transaksi);
Kenapa 3600? Karena 1 jam = 3600 detik. Jadi, dengan mengalikan jam ke-n dengan 3600,
kita mendapatkan total detik yang nantinya dikonversi oleh SEC_TO_TIME()
menjadi format
HH:MM:SS
.
4. Penggunaan Fungsi TIME()
Pada Aplikasi Jadwal
Pada aplikasi jadwal (seperti jadwal keberangkatan bus, jadwal film di bioskop, dll.),
tipe data dan fungsi waktu sangat krusial. Misalnya, kita punya tabel jadwal_bus
sebagai berikut:
CREATE TABLE jadwal_bus (
id INT AUTO_INCREMENT PRIMARY KEY,
rute VARCHAR(50),
jam_berangkat TIME,
jam_tiba TIME
);
Saat kita memasukkan data, pengguna bisa mengetik '13:45'
tanpa detik,
dan MySQL akan menyimpannya sebagai '13:45:00'
. Fungsi TIME()
juga bisa membantu
memastikan bahwa format yang tertulis di dalam database tetap konsisten.
Contoh menambahkan data jadwal baru:
INSERT INTO jadwal_bus (rute, jam_berangkat, jam_tiba)
VALUES
('Jakarta - Bandung', TIME('13:45'), TIME('16:30')),
('Bandung - Yogyakarta', TIME('21:10'), TIME('04:00'));
Jangan lupa bahwa TIME()
di sini akan memformat input string menjadi 'HH:MM:SS'
.
Jadi jika awalnya user hanya memasukkan '21:10'
, MySQL memahami itu sebagai '21:10:00'
.
5. Mengubah Data Waktu ke Format 12 Jam
Meskipun TIME()
menampilkan data dalam format 24 jam, kita bisa memanfaatkan
TIME_FORMAT()
untuk mengubahnya ke format 12 jam (AM/PM). Misalnya:
SELECT
TIME_FORMAT(TIME(waktu_transaksi), '%h:%i:%s %p') AS jam_12
FROM transaksi;
Di sini, TIME_FORMAT
mengambil hasil TIME(waktu_transaksi)
dan memformatnya
menjadi jam:menit:detik AM/PM
sesuai kebutuhan. Format %h
mewakili jam dalam
range 01..12
, sementara %p
menampilkan AM
atau PM
.
Ini sangat bermanfaat jika kita ingin menampilkan jam sesuai kebiasaan (misalnya format 12 jam)
di aplikasi front-end, namun tetap menyimpan data dalam format 24 jam di basis data.
Potensi Error dan Penanganannya
Selama menggunakan TIME()
, ada beberapa hal yang perlu kita waspadai:
-
String yang tidak valid: Jika string yang diberikan ke
TIME()
tidak dalam formatdatetime
yang dikenali MySQL, maka hasilnya bisaNULL
atau terjadi error tergantung pada sql_mode yang sedang aktif. -
Nilai di luar jangkauan: Tipe
TIME
mendukung rentang dari'-838:59:59'
hingga'838:59:59'
. Meskipun aneh rasanya melihat nilai lebih dari 24 jam, hal ini dimungkinkan di MySQL untuk merepresentasikan interval waktu yang panjang. Tetap saja, jika nilai yang dimasukkan di luar rentang ini, MySQL mungkin akan memberikan peringatan atau mengkonversinya menjadi nilai terdekat dalam rentang tersebut. -
Perlakuan zero time: Terkadang MySQL akan menggunakan
'00:00:00'
jika terjadi kesalahan parsing waktu. Pastikan kita mencatat hal ini saat melakukan validasi data.
Ringkasan Manfaat
Fungsi TIME()
di MySQL sangat berguna terutama ketika:
- Membutuhkan pemisahan komponen waktu dari
DATETIME
atauTIMESTAMP
. - Menyimpan dan memanipulasi waktu (jam, menit, detik) tanpa memerlukan data tanggal.
- Memformat input string ke dalam format waktu
HH:MM:SS
. - Membantu validasi jam masuk-keluar, jadwal, dan interval waktu.
Ketika kamu bekerja dengan aplikasi yang memerlukan data waktu spesifik—misalnya aplikasi jadwal, sistem absensi,
manajemen jadwal transportasi, atau apapun yang berkaitan dengan jam operasi—maka fungsi TIME()
ini
akan sangat memudahkan. Dikombinasikan dengan fungsi-fungsi lain seperti TIMEDIFF()
, TIME_TO_SEC()
,
SEC_TO_TIME()
, dan TIME_FORMAT()
, kamu bisa melakukan banyak manipulasi waktu secara langsung
di level query.
Catatan Penting
Dalam pemrograman basis data, terutama yang berkaitan dengan tipe DATETIME
, TIMESTAMP
,
dan TIME
, penting untuk selalu memahami format dan rentang yang didukung oleh MySQL.
Hal ini akan membantu mencegah error atau bug di kemudian hari.
Selain itu, meskipun MySQL menawarkan kemudahan dalam manipulasi data waktu, bukan berarti kita bisa
bebas dari validasi di sisi aplikasi. Validasi di aplikasi tetap krusial untuk memastikan
data yang masuk ke dalam basis data telah sesuai dengan aturan bisnis yang berlaku.
Dengan memahami fungsi TIME()
dan cara kerjanya, kita akan lebih lincah dalam mengolah data
yang berkaitan dengan waktu, mulai dari sekadar mengekstrak jam dan menit, hingga melakukan perhitungan
kompleks dan pemformatan khusus. Pastikan untuk selalu bereksperimen dan melakukan uji coba di lingkungan
yang terkontrol sebelum mengimplementasikannya di produksi, serta dokumentasikan setiap perubahan atau
kebijakan waktu yang kamu berlakukan.
Baca Juga :