Giải pháp: DAYNAME()
Hàm DAYNAME(date) trả về tên ngày trong tuần (Monday, Tuesday...).
Ví dụ minh họa
Tạo bảng
mysql> CREATE TABLE DemoTable (
LoginDate TIMESTAMP
);
mysql> INSERT INTO DemoTable VALUES('2019-06-01');
mysql> INSERT INTO DemoTable VALUES('2019-06-02');
mysql> INSERT INTO DemoTable VALUES('2019-06-03');
mysql> INSERT INTO DemoTable VALUES('2019-06-04');
mysql> INSERT INTO DemoTable VALUES('2018-06-21');
Dữ liệu gốc
+-----------------------+ | LoginDate | +-----------------------+ | 2019-06-01 00:00:00 | | 2019-06-02 00:00:00 | | 2019-06-03 00:00:00 | | 2019-06-04 00:00:00 | | 2018-06-21 00:00:00 | +-----------------------+
Truy vấn DAYNAME
mysql> SELECT DAYNAME(LoginDate) FROM DemoTable;
Kết quả
+--------------------+ | DAYNAME(LoginDate) | +--------------------+ | Saturday | | Sunday | | Monday | | Tuesday | | Thursday | +--------------------+
Các hàm liên quan ngày/tháng
| Hàm | Trả về | Ví dụ |
|---|---|---|
DAYNAME() | Tên ngày (English) | Monday |
DAYOFWEEK() | Số thứ tự (1=CN, 7=Thứ 7) | 2 |
DAYOFMONTH() | Ngày trong tháng | 15 |
DAYOFYEAR() | Ngày trong năm | 166 |
MONTHNAME() | Tên tháng | January |
WEEKDAY() | Số thứ tự (0=Thứ 2, 6=CN) | 0 |
WEEK() | Tuần trong năm | 25 |
QUARTER() | Quý (1-4) | 2 |
Đổi ngôn ngữ (Locale)
MySQL trả về tiếng Anh mặc định. Để đổi ngôn ngữ:
-- Set session locale
SET lc_time_names = 'vi_VN';
SELECT DAYNAME('2019-06-01'); -- Thứ Bảy
SELECT MONTHNAME('2019-06-01'); -- Tháng Sáu
Hoặc dùng DATE_FORMAT() với locale:
SELECT DATE_FORMAT(LoginDate, '%W') FROM DemoTable; -- Tên ngày đầy đủ SELECT DATE_FORMAT(LoginDate, '%a') FROM DemoTable; -- Tên ngày viết tắt (Mon, Tue)
Ứng dụng: Lọc ngày cuối tuần
SELECT * FROM DemoTable WHERE DAYOFWEEK(LoginDate) IN (1, 7); -- Chủ nhật (1) hoặc Thứ 7 (7)