SQL - Date & Time: Panduan Komprehensif untuk Pemula

Hai teman-teman, para ahli basis data masa depan! Hari ini, kita akan melihat dunia yang menarik tentang tanggal dan waktu dalam SQL. Sebagai guru komputer yang ramah di lingkungan sekitar Anda, saya di sini untuk membimbing Anda dalam perjalanan ini dengan banyak contoh dan penjelasan. Jadi, ambil mesin waktu virtual Anda, dan mari kita mulai!

SQL - Date & Time

Tipe Data Date & Time dalam SQL

Sebelum kita mulai memanipulasi tanggal dan waktu, kita perlu memahami bagaimana SQL menyimpan informasi ini. Pahami bahwa tipe data ini adalah wadah khusus yang dirancang secara spesifik untuk data temporal.

DATE

Tipe data DATE menyimpan tanggal dalam format YYYY-MM-DD.

CREATE TABLE events (
event_id INT PRIMARY KEY,
event_name VARCHAR(100),
event_date DATE
);

INSERT INTO events (event_id, event_name, event_date)
VALUES (1, 'Pesta Perusahaan', '2023-07-15');

Dalam contoh ini, kita membuat tabel events dan menambahkan pesta perusahaan yang dijadwalkan pada 15 Juli 2023. Tipe data DATE memastikan kita menyimpan hanya tanggal, tanpa informasi waktu.

TIME

Tipe data TIME menyimpan waktu dalam format HH:MI:SS.

CREATE TABLE class_schedule (
class_id INT PRIMARY KEY,
class_name VARCHAR(100),
start_time TIME
);

INSERT INTO class_schedule (class_id, class_name, start_time)
VALUES (1, 'Perkenalan SQL', '09:30:00');

Di sini, kita membuat jadwal kelas dan menambahkan kelas SQL yang dimulai pada 9:30 AM. Tipe data TIME memungkinkan kita menyimpan waktu ini secara tepat.

DATETIME

Tipe data DATETIME menggabungkan tanggal dan waktu, biasanya dalam format YYYY-MM-DD HH:MI:SS.

CREATE TABLE appointments (
appointment_id INT PRIMARY KEY,
patient_name VARCHAR(100),
appointment_datetime DATETIME
);

INSERT INTO appointments (appointment_id, patient_name, appointment_datetime)
VALUES (1, 'John Doe', '2023-06-20 14:30:00');

Dalam contoh ini, kita menjadwalkan kunjungan dokter untuk John Doe pada 20 Juni 2023, pukul 2:30 PM. Tipe data DATETIME memungkinkan kita menyimpan tanggal dan waktu dalam satu kolom.

TIMESTAMP

Tipe data TIMESTAMP mirip dengan DATETIME, tetapi biasanya digunakan untuk melacak saat terakhir record diubah.

CREATE TABLE blog_posts (
post_id INT PRIMARY KEY,
title VARCHAR(200),
content TEXT,
last_updated TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);

INSERT INTO blog_posts (post_id, title, content)
VALUES (1, 'Postingan Blog Pertama', 'Hai, Dunia!');

Dalam contoh ini, kolom last_updated secara otomatis akan diatur ke tanggal dan waktu saat ini saat record diinputkan atau diperbarui.

Fungsi Date & Time dalam SQL

Sekarang kita tahu bagaimana menyimpan tanggal dan waktu, mari kita jelajahi beberapa fungsi magis SQL untuk memanipulasi data ini. Saya suka menganggap fungsi-fungsi ini sebagai alat perjalanan waktu dalam kotak alat SQL kami!

Tanggal dan Waktu Saat Ini

mari kita mulai dengan dasar - mendapatkan tanggal dan waktu saat ini.

SELECT CURRENT_DATE() AS hari_ini,
CURRENT_TIME() AS waktu_sekarang,
NOW() AS datetime_sekarang;

Query ini akan memberikan Anda tanggal saat ini, waktu saat ini, dan datetime saat ini. Itu seperti meminta SQL, "Hai, jam berapa sekarang?" Sangat praktis, kan?

Ekstrak Bagian Tanggal

kadang-kadang, kita hanya memerlukan bagian tertentu dari tanggal. SQL juga memiliki fungsi untuk hal itu!

SELECT YEAR('2023-06-20') AS tahun,
MONTH('2023-06-20') AS bulan,
DAY('2023-06-20') AS hari,
WEEKDAY('2023-06-20') AS hari_minggu;

Query ini mengekstrak tahun, bulan, hari, dan hari minggu dari tanggal yang diberikan. Itu seperti memotong tanggal untuk mendapatkan informasi yang kita butuhkan.

Aritmetika Tanggal

SQL memungkinkan kita melakukan operasi aritmetik pada tanggal. Ini sangat berguna untuk menghitung durasi atau mencari tanggal masa depan/masa lalu.

SELECT DATE_ADD('2023-06-20', INTERVAL 7 DAY) AS minggu_lalu,
DATE_SUB('2023-06-20', INTERVAL 1 BULAN) AS bulan_lalu,
DATEDIFF('2023-12-31', '2023-06-20') AS hari_sampai_tahun_baru;

Dalam contoh ini, kita menambahkan 7 hari ke tanggal, mengurangi 1 bulan dari tanggal, dan menghitung jumlah hari antara dua tanggal. Itu seperti memiliki mesin waktu di tangan kita!

Pemformatan Tanggal

kadang-kadang, kita perlu mempresentasikan tanggal dalam format tertentu. Fungsi DATE_FORMAT datang untuk membantu.

SELECT DATE_FORMAT('2023-06-20', '%W, %M %d, %Y') AS tanggal_diformat,
DATE_FORMAT('2023-06-20 14:30:00', '%h:%i %p') AS waktu_diformat;

Query ini memformat tanggal menjadi "Tuesday, June 20, 2023" dan waktu menjadi "02:30 PM". Itu seperti mengenakan pakaian mewah untuk tanggal kita!

Berikut adalah tabel dari beberapa penanda format yang biasa digunakan:

Penanda Deskripsi Contoh
%Y Tahun 4 digit 2023
%y Tahun 2 digit 23
%M Nama bulan January
%m Bulan (01-12) 01
%d Hari bulan (01-31) 01
%W Nama hari minggu Monday
%w Hari minggu (0-6, 0 adalah Minggu) 1
%H Jam (00-23) 13
%h Jam (01-12) 01
%i Menit (00-59) 30
%s Detik (00-59) 45
%p AM atau PM PM

Menggabungkan Semua

mari kitaakhiri dengan contoh yang lebih kompleks yang menggabungkan beberapa konsep:

CREATE TABLE user_logins (
login_id INT PRIMARY KEY AUTO_INCREMENT,
user_id INT,
login_time DATETIME DEFAULT CURRENT_TIMESTAMP
);

INSERT INTO user_logins (user_id) VALUES (1), (2), (3);

SELECT
user_id,
login_time,
DATE_FORMAT(login_time, '%W, %M %d, %Y at %h:%i %p') AS formatted_login_time,
CASE
WHEN WEEKDAY(login_time) IN (5, 6) THEN 'Weekend Login'
ELSE 'Weekday Login'
END AS login_type,
TIMESTAMPDIFF(HOUR, login_time, NOW()) AS hours_since_login
FROM user_logins
WHERE login_time > DATE_SUB(CURRENT_DATE(), INTERVAL 1 WEEK);

Dalam contoh ini, kita membuat tabel user_logins, memasukkan beberapa data, dan kemudian mengquerynya dengan berbagai manipulasi tanggal dan waktu. Kita memformat waktu login, menentukan apakah itu login akhir minggu atau bukan, dan menghitung berapa jam yang telah berlalu sejak login.

Dan itu saja, teman-teman! Kita telah melintasi waktu dengan SQL, belajar tentang tipe data dan fungsi tanggal dan waktu. Ingat, latihan membuat sempurna, jadi jangan khawatir untuk mencoba konsep ini. Sebelum Anda tahu, Anda akan menjadi master waktu di database Anda... paling tidak!

Credits: Image by storyset