Menu
CoddyTech

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:

  1. DATE() - Chuyển đổi chuỗi thành ngày
  2. STRFTIME() - Định dạng ngày theo các tham số đã chỉ định
  3. DATE('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ại

Ví 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')
challenge icon

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ử

quiz iconTự kiểm tra

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

Tự luyện tập: Playground SQL