Định dạng thời gian trong MySQL là một phần kiến thức khá quan trọng và thường xuyên được và cần sử dụng. Trong bài viết này chúng ta sẽ tìm hiểu về hàm DATE_FORMAT, hàm định dạng thời gian trong MySQL.
Hàm DATE_FORMAT trong MySQL
Hàm DATE_FORMAT
định dạng một thời gian theo định dạng truyền vào.
Cú pháp DATE_FOMAT
DATE_FORMAT( date, format_mask )
Trong đó:
- date: thời gian cần định dạng
- format_mask: Chuỗi định dạng áp dụng.
format_mask sẽ bao gồm các định dạng chuỗi như sau.
Giá trị | Mô tả |
%a | Viết tắt tên ngày trong tuần (Sun – Sat) |
%b | Viết tắt tên tháng (Jan đến Dec) |
%c | Tháng dưới dạng giá trị số (0 đến 12) |
%D | Ngày trong tháng dưới dạng giá trị số, theo sau là hậu tố (1st, 2nd, 3rd, …) |
%d | Ngày trong tháng dưới dạng giá trị số (01 đến 31) |
%e | Ngày trong tháng dưới dạng giá trị số (1 đến 31) |
%f | Giây (000000 đến 999999) |
%H | Hour (00 đến 23) |
%h hoặc %l | Giờ (00 đến 12) |
%i | Phút (00 đến 59) |
%j | Ngày trong năm (001 đến 366) |
%k | Giờ (00 đến 23) |
%l | Giờ (1 đến 12) |
%M | Tên tháng đầy đủ (January đến December) |
%m | Tên tháng dưới dạng giá trị số (00 đến 12) |
%p | AM hoặc PM |
%r | Thời gian ở định dạng 12 giờ AM hoặc PM (hh: mm: ss AM / PM) |
%S | Giây (00 đến 59) |
%s | Giây (00 đến 59) |
%T | Thời gian ở định dạng 24 giờ (hh: mm: ss) |
%U | Tuần mà Chủ nhật là ngày đầu tuần (00 đến 53) |
%u | Tuần mà thứ Hai là ngày đầu tuần (00 đến 53) |
%V | Tuần mà Chủ nhật là ngày đầu tuần (01 đến 53) |
%v | Tuần mà thứ Hai là ngày đầu tuần (01 đến 53) |
%W | Tên ngày trong tuần đầy đủ (Sunday đến Saturday) |
%w | Ngày trong tuần trong đó Chủ nhật = 0 và Thứ bảy = 6 |
%X | Năm trong tuần mà Chủ nhật là ngày đầu tuần |
%x | Năm trong tuần, thứ Hai là ngày đầu tuần |
%Y | Năm dưới dạng giá trị số, 4 chữ số |
%y | Năm dưới dạng giá trị số, 2 chữ số(2 số đuôi) |
>> XEM THÊM: Các kiểu dữ liệu trong MySQL (Data Types) – Học MySQL
Ví dụ
Mình cần fomat ngày 2022/02/02 thành định dạng là 02-02-2022 thì mình sẽ có câu lệnh SQL như sau:
DATE_FORMAT("2022/02/02", "%d-%m-%Y")
Áp dụng sử dụng thực tế vào bảng dữ liệu
Ví dụ 1:
Mình có một bảng token để lưu mã token đăng nhập như bên dưới ảnh(bảng này gồm rất nhiều hàng mình chỉ chụp lại một vài hàng minh họa, các ví dụ sau khi thao tác csdl có thể sẽ thấy một số dl lạ cũng kg cần thắc mắc hơn nhé).
Bảng này có một cột là timecreate là cột để lưu lại thời gian tạo token.
Vậy bây giờ khi lấy dữ liệu ta muốn cột timecreate chỉ bao gồm ngày, tháng, năm không bao gồm giờ, phút, giây. Và theo định dạng là YYYY-mm-dd.
Viết câu lệnh MySQL như sau:
SELECT token_id, user_id, DATE_FORMAT(timecreate, "%Y-%m-%d") AS timecreate
FROM `tokens`
Lúc này kết quả trả về sẽ nhận được như bên dưới.
Ví dụ số 2:
Cũng với bảng trên, bây giờ ta đặt ra vấn đề là lấy tất cả các hàng được tạo trong tháng 2 năm 2022.
Vậy bạn sẽ làm theo cách nào, đặt điều kiện kép timecraete lớn hơn ngày đầu tiên của tháng và bé hơn ngày cuối cùng của tháng.
Tất nhiên là cách trên cũng không sai, tuy nhiên dùng DATE_FOMAT nhìn code sẽ gọn gằng hơn. Ý tưởng là ta sẽ sử dụng hàm DATE_FOMAT để dịnh dạng cột timecraete về định dạng Năm-tháng và đem so sánh bằng với “2022-02” như vậy là được rồi.
>>XEM THÊM: Tìm hiểu AUTO_INCREMENT Field trong MySQL – Cột giá trị tự tăng dần
Câu lệnh SQL đầy đủ
SELECT token_id, user_id, DATE_FORMAT(timecreate, "%Y-%m-%d") AS timecreate
FROM `tokens`
WHERE DATE_FORMAT(timecreate, "%Y-%m") = "2022-02";
Kết quả trả về
Như vậy chỉ các hàng được tạo trong tháng 2 mới được lấy ra.
Cảm ơn bạn đã đọc hết bài viết! Chúc bạn học tốt!!
>> XEM THÊM: Hiển thị CODE các ngôn ngữ lập trình trong bài viết WordPress
[XEM TẤT CẢ BÀI VIẾT VỀ PHP & MYSQL TẠI ĐÂY]
XEM THÊM Lệnh DELETE trong MySQL – Lệnh xóa bản ghi Tìm hiểu thuộc tính AUTO_INCREMENT trong MySQL – Giá trị tự tăng dần Câu lệnh CREATE TABLE trong MySQL – Lệnh tạo bảng mới Câu lệnh INSERT INTO trong MySQL – Lệnh chèn dữ liệu vào bảng Mệnh đề WHERE trong MySQL – Mệnh đề điều kiện