Hướng dẫn định dạng ngày trong MySQL với hàm DATE_FORMAT và các kiểu dữ liệu ngày

1. Trước khi học về định dạng ngày trong MySQL: Kiến thức cơ bản

Quản lý dữ liệu ngày tháng trong cơ sở dữ liệu đóng vai trò quan trọng trong mọi hệ thống. Trong MySQL, việc lưu trữ chính xác và định dạng phù hợp là điều không thể thiếu. Tại đây, chúng tôi sẽ giới thiệu kiến thức cơ bản về cách lưu trữ và hiển thị ngày tháng, đồng thời giải thích về hàm DATE_FORMAT giúp định dạng dữ liệu hiệu quả.

1.1 Các kiểu dữ liệu ngày trong MySQL và đặc điểm

MySQL cung cấp nhiều kiểu dữ liệu để xử lý ngày và thời gian. Hiểu rõ mục đích sử dụng sẽ giúp bạn chọn đúng kiểu dữ liệu và tối ưu hiệu suất cơ sở dữ liệu.

  • DATE
    Lưu trữ ngày ở dạng “YYYY-MM-DD”. Phù hợp với dữ liệu ngày đơn giản không cần thời gian, ví dụ ngày sinh hoặc ngày sự kiện. Ví dụ: 2024-10-19
  • DATETIME
    Lưu cả ngày và giờ. Định dạng “YYYY-MM-DD HH:MM:SS”, tiện lợi để quản lý dữ liệu có kèm thời gian như nhật ký hoặc log. Ví dụ: 2024-10-19 15:30:45
  • TIMESTAMP
    Lưu trữ theo UNIX timestamp (số giây từ ngày 1/1/1970), thường dùng trong hệ thống đa múi giờ. Có thể lấy thời gian hiện tại bằng CURRENT_TIMESTAMP.

Việc lựa chọn kiểu ngày tháng cần được thực hiện cẩn thận dựa trên yêu cầu ứng dụng, giúp tăng tính chính xác và hiệu quả khi truy vấn dữ liệu.

1.2 Khác biệt giữa lưu trữ và hiển thị ngày tháng

Khi lưu ngày tháng trong MySQL, dữ liệu được lưu ở định dạng chuẩn, nhưng khi hiển thị cho người dùng thì thường cần định dạng dễ đọc hơn. Lúc này, hàm DATE_FORMAT sẽ rất hữu ích, cho phép xuất dữ liệu với định dạng tùy chỉnh.

Trong phần tiếp theo, chúng ta sẽ tìm hiểu chi tiết về cách dùng DATE_FORMAT và các ứng dụng thực tế.

2. Cách sử dụng cơ bản của hàm DATE_FORMAT

DATE_FORMAT dùng để định dạng ngày tháng đã lưu theo mẫu chỉ định. Nhờ các ký hiệu định dạng linh hoạt, bạn có thể tùy chỉnh nhiều kiểu hiển thị khác nhau.

2.1 Cú pháp của DATE_FORMAT

DATE_FORMAT(date, format)
  • date: Dữ liệu ngày cần định dạng (DATE, DATETIME, TIMESTAMP, …).
  • format: Chuỗi định dạng đầu ra, sử dụng các ký hiệu bắt đầu bằng %.

Ví dụ, câu lệnh sau sẽ hiển thị ngày ở định dạng “YYYY/MM/DD”:

SELECT DATE_FORMAT('2024-10-19', '%Y/%m/%d');

Kết quả:

2024/10/19

2.2 Các ký hiệu định dạng phổ biến

DATE_FORMAT hỗ trợ nhiều ký hiệu định dạng để tùy chỉnh ngày giờ. Một số ký hiệu thường dùng:

  • %Y: Năm 4 chữ số (ví dụ: 2024)
  • %m: Tháng 2 chữ số (01–12)
  • %d: Ngày 2 chữ số (01–31)
  • %W: Tên thứ (ví dụ: Saturday)
  • %H: Giờ (00–23, theo 24h)
  • %i: Phút (00–59)
  • %s: Giây (00–59)

Ví dụ, truy vấn sau sẽ hiển thị thứ, năm, tháng và ngày:

SELECT DATE_FORMAT('2024-10-19', '%W, %Y-%m-%d');

Kết quả:

Saturday, 2024-10-19

2.3 Định dạng kiểu tiếng Nhật

Bạn cũng có thể dùng DATE_FORMAT để xuất ngày theo kiểu Nhật. Ví dụ:

SELECT DATE_FORMAT('2024-10-19', '%Y年%m月%d日');

Kết quả:

2024年10月19日

Thường dùng trong báo cáo, hóa đơn hoặc tài liệu tiếng Nhật.

3. Thủ thuật nâng cao với DATE_FORMAT

Kết hợp DATE_FORMAT với các hàm MySQL khác có thể giúp xử lý ngày tháng mạnh mẽ hơn.

3.1 Kết hợp với các hàm ngày khác

Có thể dùng với DATE_ADD, DATE_SUB để thao tác ngày động.

Ví dụ: Cộng thêm 1 tháng và định dạng
SELECT DATE_FORMAT(DATE_ADD('2024-10-19', INTERVAL 1 MONTH), '%Y-%m-%d');

Kết quả:

2024-11-19

3.2 Kết hợp với STR_TO_DATE

STR_TO_DATE chuyển chuỗi thành ngày. Khi kết hợp với DATE_FORMAT, bạn có thể chuyển chuỗi thành kiểu ngày rồi định dạng lại.

Ví dụ: Chuyển chuỗi sang ngày và định dạng
SELECT DATE_FORMAT(STR_TO_DATE('2024年10月19日', '%Y年%c月%e日'), '%Y/%m/%d');

Kết quả:

2024/10/19

4. Ví dụ định dạng ngày thường dùng

Dưới đây là một số định dạng ngày phổ biến trong công việc và hệ thống:

4.1 Ngày với dấu gạch chéo

SELECT DATE_FORMAT('2024-10-19', '%Y/%m/%d');

Kết quả:

2024/10/19

4.2 Định dạng ISO 8601

SELECT DATE_FORMAT('2024-10-19', '%Y-%m-%d');

Kết quả:

2024-10-19

4.3 Hiển thị tên tháng và thứ

SELECT DATE_FORMAT('2024-10-19', '%M %W');

Kết quả:

October Saturday

5. Kết luận

Hàm DATE_FORMAT là công cụ mạnh mẽ trong MySQL để tùy chỉnh hiển thị ngày tháng. Từ cơ bản đến nâng cao, kết hợp với các hàm khác như STR_TO_DATE hoặc DATE_ADD, bạn có thể xử lý dữ liệu ngày linh hoạt và tối ưu hóa hệ thống.

Hãy áp dụng các kỹ thuật này để quản lý dữ liệu ngày hiệu quả hơn trong ứng dụng và cơ sở dữ liệu của bạn.