SQLite - Ngày và Giờ

Xin chào các bạn đang học lập trình! Hôm nay, chúng ta sẽ cùng khám phá thế giới kỳ diệu của ngày và giờ trong SQLite. Là giáo viên máy tính hàng xóm thân thiện của bạn, tôi sẽ dẫn đường cho bạn trong hành trình này với rất nhiều ví dụ và giải thích. Hãy chuẩn bị và bắt đầu nào!

SQLite - Date & Time

Chuỗi Thời Gian

Trong SQLite, ngày và giờ thường được lưu trữ dưới dạng chuỗi văn bản. Điều này có thể看起来 lạ lẫm ban đầu, nhưng thực tế nó rất linh hoạt và dễ dàng để làm việc với. Hãy cùng nhìn vào một số định dạng phổ biến:

Định dạng ISO8601

Định dạng phổ biến nhất là ISO8601, nó trông như thế này:

YYYY-MM-DD HH:MM:SS

Ví dụ:

'2023-06-15 14:30:00'

Điều này đại diện cho ngày 15 tháng 6 năm 2023, lúc 2:30 chiều.

Các Định Dạng Khác

SQLite rất dễ dãi khi nói đến các định dạng ngày và giờ. Dưới đây là một số định dạng khác được chấp nhận:

YYYY-MM-DD
YYYY-MM-DD HH:MM
YYYY-MM-DD HH:MM:SS.SSS
YYYY-MM-DDTHH:MM
YYYY-MM-DDTHH:MM:SS
YYYY-MM-DDTHH:MM:SS.SSS
HH:MM
HH:MM:SS
HH:MM:SS.SSS

Hãy thử một ví dụ:

CREATE TABLE events (
id INTEGER PRIMARY KEY,
event_name TEXT,
event_date TEXT
);

INSERT INTO events (event_name, event_date) VALUES
('Birthday Party', '2023-07-01'),
('Movie Night', '2023-07-15 20:00'),
('Morning Jog', '06:30');

SELECT * FROM events;

Điều này sẽ tạo một bảng với các định dạng ngày và giờ khác nhau. Thật thú vị phải không?

Chỉnh sửa

Bây giờ, hãy nói về các chỉnh sửa. Đây là những từ khóa đặc biệt cho phép chúng ta manipulates ngày và giờ. Chúng giống như những枝魔法 cho các chuỗi thời gian của chúng ta!

Các Chỉnh Sửa Phổ Biến

Dưới đây là bảng các chỉnh sửa phổ biến:

Chỉnh sửa Mô tả
+N days Thêm N ngày vào ngày
-N days Bớt N ngày khỏi ngày
start of month Thay đổi ngày thành ngày đầu tiên của tháng
start of year Thay đổi ngày thành ngày đầu tiên của năm
weekday N Thay đổi ngày thành ngày tiếp theo mà ngày trong tuần là N (0=Chủ nhật, 1=Thứ hai, v.v.)

Hãy nhìn chúng trong hành động:

SELECT
date('now') AS today,
date('now', '+1 day') AS tomorrow,
date('now', '-1 month') AS last_month,
date('now', 'start of month') AS month_start,
date('now', 'weekday 1') AS next_monday;

Truy vấn này sẽ hiển thị ngày hiện tại, ngày mai, ngày cách đây một tháng, đầu tháng hiện tại và ngày của thứ Hai tiếp theo. Rất hữu ích phải không?

Định dạng

Định dạng là như những nhà tạo mẫu của thế giới ngày và giờ. Chúng giúp chúng ta trình bày ngày và giờ theo những cách khác nhau.

Hàm strftime()

Hàm chính chúng ta sử dụng để định dạng là strftime(). Nó có nghĩa là "string format time". Dưới đây là cú pháp cơ bản:

strftime(format, time-string, modifiers...)

Hãy nhìn vào một số chỉ định định dạng phổ biến:

Chỉ định Mô tả
%Y Năm (4 chữ số)
%m Tháng (01-12)
%d Ngày trong tháng (01-31)
%H Giờ (00-23)
%M Phút (00-59)
%S Giây (00-59)
%w Ngày trong tuần (0-6 với Chủ nhật=0)

Bây giờ, hãy kết hợp tất cả lại:

SELECT
strftime('%Y-%m-%d', 'now') AS date_only,
strftime('%H:%M', 'now') AS time_only,
strftime('%Y-%m-%d %H:%M:%S', 'now') AS date_time,
strftime('%w', 'now') AS day_of_week,
strftime('%Y-%m-%d', 'now', '+1 month') AS next_month;

Truy vấn này sẽ hiển thị ngày hiện tại, thời gian hiện tại, ngày và giờ hiện tại, ngày trong tuần (0-6) và ngày cách đây một tháng.

Ví dụ Hilarious

Hãy kết thúc bằng một ví dụ vui vẻ. Hãy tưởng tượng bạn đang lên kế hoạch cho một buổi tiệc và bạn muốn biết ngày trong tuần sẽ là gì trong 100 ngày:

SELECT
strftime('%Y-%m-%d', 'now', '+100 days') AS party_date,
CASE cast(strftime('%w', 'now', '+100 days') AS INTEGER)
WHEN 0 THEN 'Sunday'
WHEN 1 THEN 'Monday'
WHEN 2 THEN 'Tuesday'
WHEN 3 THEN 'Wednesday'
WHEN 4 THEN 'Thursday'
WHEN 5 THEN 'Friday'
WHEN 6 THEN 'Saturday'
END AS party_day;

Truy vấn này sẽ cho bạn biết ngày trong 100 ngày nữa và ngày trong tuần sẽ là gì. Hoàn hảo cho việc lên kế hoạch tiệc!

Và đó là tất cả, các bạn! Chúng ta đã cùng nhau khám phá thế giới ngày và giờ trong SQLite. Nhớ rằng, thực hành là cách tốt nhất để thành thạo, vì vậy đừng ngại thử nghiệm với các hàm này. Trước khi bạn biết, bạn sẽ trở thành một pháp sư ngày và giờ! Chúc các bạn lập trình vui vẻ!

Credits: Image by storyset