Xử lý ngày tháng phần 3
Thuộc phần Kiến thức cơ bản trong hành trình SQL của Coddy. Bài học 33 trên 72.
SQL cung cấp một số hàm hữu ích để xử lý và định dạng ngày tháng. Dưới đây là một số hàm ngày tháng phổ biến:
DATE()- Chuyển đổi chuỗi thành ngàySTRFTIME()- Định dạng ngày theo các tham số đã chỉ địnhDATE('now')- Lấy ngày hiện tại:
Ví dụ: chuyển chuỗi thành ngày:
SELECT DATE('2023-05-15 13:45:00')
-- Trả về: 2023-05-15
SELECT DATE('now')
-- Trả về ngày hiện tạiVí dụ, trích xuất năm, tháng và ngày từ ngày tháng:
-- Lấy năm
SELECT STRFTIME('%Y', '2023-05-15')
-- Trả về: 2023
-- Lấy tháng
SELECT STRFTIME('%m', '2023-05-15')
-- Trả về: 05
-- Lấy ngày
SELECT STRFTIME('%d', '2023-05-15')
-- Trả về: 15
-- Hiển thị năm và ngày cùng nhau (có thể dùng dấu phân cách bất kỳ)
SELECT STRFTIME('%Y:%d', '2023-05-15')
-- Trả về: 2023:15
-- Thay bằng dấu gạch ngang để phân cách
SELECT STRFTIME('%d-%m-%Y', '2023-05-15')
-- Trả về: 15-05-2023
-- Lấy thứ trong tuần
SELECT STRFTIME('%w', '2023-05-15')
-- Trả về: 1 (thứ Hai; Chủ nhật là 0)Các chỉ định định dạng thường dùng:
- %Y: Năm (4 chữ số)
- %m: Tháng (01-12)
- %d: Ngày trong tháng (01-31)
- %w: Ngày trong tuần (0-6, Chủ nhật là 0)
- %H: Giờ (00-23)
- %M: Phút (00-59)
- %S: Giây (00-59)
Bạn có thể dùng bất kỳ ký tự phân cách nào giữa các chỉ định định dạng (ví dụ: -, :, /). Ví dụ, STRFTIME('%d-%m-%Y', date) và STRFTIME('%d:%m:%Y', date) đều kết hợp ngày, tháng và năm, chỉ khác ký tự phân cách.
Bạn có thể kết hợp các hàm này trong truy vấn:
-- Tìm tất cả bản ghi trong năm hiện tại
SELECT * FROM table1
WHERE STRFTIME('%Y', date_column) = STRFTIME('%Y', 'now')Thử thách
DễCác bảng và cột có sẵn:
events:id,start,end
Viết một truy vấn hiển thị:
- ID sự kiện
- Ngày bắt đầu được định dạng theo dạng "DD-MM-YYYY". Gọi cột này là
formatted_start - Ngày kết thúc được định dạng theo dạng "DD-MM-YYYY". Gọi cột này là
formatted_end - Thời lượng tính bằng ngày giữa ngày bắt đầu và ngày kết thúc, được làm tròn đến số nguyên gần nhất. Gọi cột này là
duration_days
Chỉ lọc các hàng có năm trong cột start là 2009 (STRFTIME() trả về chuỗi chứ không phải số).
Sắp xếp kết quả theo số ngày của thời lượng theo thứ tự giảm dần.
Nhắc lại: Để tính chênh lệch giữa các ngày, hãy dùng JULIANDAY(end) - JULIANDAY(start) và dùng ROUND() để làm tròn thành số nguyên.
Tự làm thử
Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.
Tất cả bài học trong Kiến thức cơ bản
2Điều kiện
Kiến thức cơ bản về điều kiệnTừ khóa ANDTừ khóa ORTừ khóa NOTKết hợp nhiều điều kiệnDấu ngoặc đơnGiá trị logic3Định dạng giá trị trả về cụ thể
Giá trị nullSắp xếp kết quả phần 1Sắp xếp kết quả phần 2Ôn tập: Công ty an ninh mạngGiới hạn số bản ghiÔn tập: Nhà máy sản xuất xe6Thử thách nhập môn
Ôn tập: bầu cử quốc hộiÔn tập: cảnh sát bắt giữ tội phạmÔn tập: vật chứa đồ uống tại quầy barÔn tập: kỹ sư tạo cột mớiTự luyện tập: Playground SQL