‘Interval’ di PostgreSQL merepresentasikan durasi waktu. Interval bisa berasal dari hasil pengurangan dua nilai TIMESTAMP atau didefinisikan secara eksplisit dengan keyword INTERVAL.
Berikut contohnya:
SELECT INTERVAL '2 days 3 hours 40 minutes' AS example_interval;
Output yang Diharapkan:
example_interval
-------------------
2 days 03:40:00
Mengekstrak Hari, Jam, dan Menit
Mengekstrak Hari
Untuk mengekstrak total jumlah hari dari sebuah interval:
SELECT EXTRACT(DAY FROM INTERVAL '5 days 4 hours 30 minutes') AS total_days;
Output yang Diharapkan:
total_days
------------
5
Mengekstrak Jam
Saat mengekstrak jam, fungsi EXTRACT hanya mengembalikan komponen jam dari interval, bukan total jam termasuk hari. Contohnya:
SELECT EXTRACT(HOUR FROM INTERVAL '2 days 4 hours 30 minutes') AS hours_component;
Output yang Diharapkan:
hours_component
-----------------
4
Untuk mendapatkan total jam termasuk hari, Anda perlu melakukan sedikit perhitungan aritmetika:
SELECT EXTRACT(DAY FROM INTERVAL '2 days 4 hours 30 minutes') * 24 +
EXTRACT(HOUR FROM INTERVAL '2 days 4 hours 30 minutes') AS total_hours;
Output yang Diharapkan:
total_hours
------------
52
Mengekstrak Menit
Sama seperti jam, mengekstrak menit hanya mengembalikan bagian menit dari interval:
SELECT EXTRACT(MINUTE FROM INTERVAL '2 days 4 hours 30 minutes') AS minutes_component;
Output yang Diharapkan:
minutes_component
-------------------
30
Untuk mendapatkan total menit dari interval, Anda bisa menghitungnya seperti ini:
SELECT (EXTRACT(DAY FROM INTERVAL '2 days 4 hours 30 minutes') * 24 * 60) +
(EXTRACT(HOUR FROM INTERVAL '2 days 4 hours 30 minutes') * 60) +
EXTRACT(MINUTE FROM INTERVAL '2 days 4 hours 30 minutes') AS total_minutes;
Output yang Diharapkan:
total_minutes
---------------
3150
Contoh Praktis
Mari kita lihat contoh praktis menggunakan sebuah tabel. Misalkan kita punya tabel bernama events yang menyimpan timestamp awal dan akhir untuk berbagai event:
CREATE TABLE events (
event_id SERIAL PRIMARY KEY,
start_time TIMESTAMP,
end_time TIMESTAMP
);
INSERT INTO events (start_time, end_time)
VALUES
('2024-08-01 08:00:00', '2024-08-03 12:30:00'),
('2024-08-05 09:15:00', '2024-08-05 18:45:00');
Kita bisa menghitung interval untuk setiap event lalu mengekstrak total hari, jam, dan menitnya:
SELECT
event_id,
end_time - start_time AS duration,
EXTRACT(DAY FROM end_time - start_time) AS total_days,
(EXTRACT(DAY FROM end_time - start_time) * 24 +
EXTRACT(HOUR FROM end_time - start_time)) AS total_hours,
(EXTRACT(DAY FROM end_time - start_time) * 24 * 60 +
EXTRACT(HOUR FROM end_time - start_time) * 60 +
EXTRACT(MINUTE FROM end_time - start_time)) AS total_minutes
FROM events;
Output yang Diharapkan:
event_id | duration | total_days | total_hours | total_minutes
---------+---------------+------------+-------------+--------------
1 | 2 days 04:30 | 2 | 52 | 3150
2 | 09:30:00 | 0 | 9 | 570
Kesimpulan
Mengekstrak hari, jam, atau menit dari interval di PostgreSQL cukup mudah dengan fungsi EXTRACT. Untuk mendapatkan nilai total, Anda perlu menggabungkan EXTRACT dengan operasi aritmetika. Teknik-teknik ini sangat berguna untuk menganalisis data berbasis waktu di aplikasi Anda.
Artikel lain yang mungkin Anda sukai:
Beekeeper Studio Adalah GUI Database Gratis & Open Source
Tool query & editor SQL terbaik yang pernah saya pakai. Semua yang saya butuhkan untuk mengelola database ada di sini. - ⭐⭐⭐⭐⭐ Mit
Beekeeper Studio cepat, intuitif, dan mudah digunakan. Beekeeper mendukung banyak sekali database, dan berjalan mulus di Windows, Mac, dan Linux.
Apa Kata Pengguna Tentang Beekeeper Studio
"Beekeeper Studio benar-benar menggantikan workflow SQL lama saya. Cepat, intuitif, dan membuat kerja dengan database jadi menyenangkan lagi."
"Saya sudah mencoba banyak GUI database, tapi Beekeeper punya keseimbangan sempurna antara fitur dan kesederhanaan. Langsung jalan."