SQL - Tarikh & Waktu: Panduan Lengkap untuk Pemula

Hai sana, para ahli pangkalan data masa depan! Hari ini, kita akan melihat dunia yang menarik tarikh dan waktu dalam SQL. Sebagai guru komputer tetangga yang ramah, saya di sini untuk memandu anda dalam perjalanan ini dengan banyak contoh dan penjelasan. Jadi, pegang mesin waktu maya anda, dan mari kita mulakan!

SQL - Date & Time

Jenis Data Tarikh & Waktu dalam SQL

Sebelum kita mula merubah tarikh dan waktu, kita perlu memahami bagaimana SQL menyimpanmaklumat ini. Anggap jenis data ini sebagai bekas khas yang direka khusus untuk data temporal.

DATE

Jenis data DATE menyimpan tarikh 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 Syarikat', '2023-07-15');

Dalam contoh ini, kita mencipta jadual events dan menambahkan pesta syarikat yang dijadualkan pada 15 Julai 2023. Jenis data DATE memastikan kita menyimpan hanya tarikh, tanpa maklumat waktu.

TIME

Jenis 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, 'Pengenalan kepada SQL', '09:30:00');

Di sini, kita mencipta jadual jadual kelas dan menambahkan kelas SQL yang bermula pada 9:30 AM. Jenis data TIME membolehkan kita menyimpan waktu ini secara tepat.

DATETIME

Jenis data DATETIME menggabungkan kedua-dua tarikh 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 menjadualkan temu bual doktor untuk John Doe pada 20 Jun 2023, jam 2:30 PM. Jenis data DATETIME membolehkan kita menyimpan kedua-dua tarikh dan waktu dalam satu kolom.

TIMESTAMP

Jenis data TIMESTAMP hampir sama dengan DATETIME, tetapi ia biasanya digunakan untuk mengesan bila rekod terakhir kali diubah suai.

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 akan secara automatik diatur ke tarikh dan waktu semasa ketika rekod dimasukkan atau dikemaskini.

Fungsi Tarikh & Waktu dalam SQL

Sekarang kita tahu bagaimana menyimpan tarikh dan waktu, mari kita jelajah beberapa fungsi ajaib SQL untuk merubah data ini. Saya suka untuk menganggap fungsi ini sebagai alat perjalanan masa dalam begelan SQL kita!

Tarikh dan Waktu Semasa

Mari kita mulakan dengan dasar - mendapatkan tarikh dan waktu semasa.

SELECT CURRENT_DATE() AS hari_ini,
CURRENT_TIME() AS waktu_semasa,
NOW() AS datetime_semasa;

Query ini akan memberikan anda tarikh, waktu, dan datetime semasa. Itu seperti bertanya kepada SQL, "Hai, berapa jam sekarang?" Ada, kan?

Mengambil Bahagian Dari Tarikh

Kadang-kadang, kita hanya perlu bahagian tertentu daripada tarikh. SQL juga ada fungsi untuk 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 mengambil tahun, bulan, hari, dan hari minggu daripada tarikh yang diberikan. Itu seperti dissecting tarikh untuk mendapatkan maklumat yang kita perlukan.

Aritmetik Tarikh

SQL membolehkan kita melakukan operasi aritmetik pada tarikh. Ini terutamanya berguna untuk mengira tempoh atau mencari tarikh masa depan/belakang.

SELECT DATE_ADD('2023-06-20', INTERVAL 7 DAY) AS minggu_later,
DATE_SUB('2023-06-20', INTERVAL 1 BULAN) AS bulan_dulu,
DATEDIFF('2023-12-31', '2023-06-20') AS hari_ke_tahun_baru;

Dalam contoh ini, kita menambah 7 hari ke tarikh, mengurangkan 1 bulan daripada tarikh, dan mengira jumlah hari antara dua tarikh. Itu seperti memiliki mesin waktu di fingertips kita!

Pemformatan Tarikh

Kadang-kadang, kita perlu mempresentasikan tarikh dalam format khusus. Fungsi DATE_FORMAT datang ke keselamatan kita.

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

Query ini memformat tarikh sebagai "Tuesday, June 20, 2023" dan waktu sebagai "02:30 PM". Itu seperti memakai pakaian mewah untuk tarikh kita!

Di sini ada jadual beberapa penanda format yang kerap digunakan:

Penanda Keterangan 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 Ahad) 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 'Log Masuk Weekend'
ELSE 'Log Masuk Hari Kerja'
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);

Contoh ini mencipta jadual user_logins, memasukkan data, dan kemudian memquerynya dengan manipulasi tarikh dan waktu berbeza. Kita memformat masa log masuk, menentukan jenis log masuk (weekend atau hari kerja), dan mengira berapa jam yang lalu sejak log masuk.

Danitu ada, rakan-rakan! Kita telah melintasi masa dengan SQL, belajar tentang jenis data tarikh dan waktu dan fungsi. Ingat, latihan membawa ke kesempurnaan, jadi jangan takut untuk mencoba konsep ini. Sebelum anda tahu, anda akan menjadi master masa... dalam pangkalan data anda, sekurang-kurangnya!

Credits: Image by storyset