答案:不同数据库获取星期几的方法各异,MySQL用DAYOFWEEK或DATE_FORMAT,PostgreSQL用EXTRACT(DOW)或TO_CHAR,SQL Server用DATEPART或DATENAME,中文需CASE转换英文名。
在 SQL 中获取指定日期是星期几,可以使用数据库自带的日期函数。不同数据库的语法略有差异,以下是常见数据库的实现方式。
1. 使用 DAYOFWEEK() 或 WEEKDAY() 函数(MySQL)
MySQL 提供了多个函数来获取星期信息:
- DAYOFWEEK(date):返回 1(星期日)到 7(星期六)
- WEEKDAY(date):返回 0(星期一)到 6(星期天)
- DATE_FORMAT(date, '%W'):返回英文星期名,如 'Monday'
- DATE_FORMAT(date, '%w'):返回 0(星期日)到 6(星期六)
示例:
SELECT DAYOFWEEK('2025-04-05') AS day_of_week, -- 返回 7(星期六) WEEKDAY('2025-04-05') AS weekday_num, -- 返回 5(星期六) DATE_FORMAT('2025-04-05', '%W') AS weekday_name; -- 返回 Saturday
2. 使用 EXTRACT() 函数(PostgreSQL、Oracle、SQLite 等)
PostgreSQL 和 Oracle 支持用 EXTRACT() 提取星期,但需配合 dow(day of week):
- 返回 0(星期日)到 6(星期六)
示例(PostgreSQL):
SELECT EXTRACT(DOW FROM DATE '2025-04-05') AS day_of_week; -- 返回 6(星期六)
若要获取星期名称:
SELECT TO_CHAR(DATE '2025-04-05', 'Day') AS weekday_name; -- 返回 Saturday
3. 使用 DATENAME() 和 DATEPART()(SQL Server)
- DATENAME(WEEKDAY, date):返回星期名称
- DATEPART(WEEKDAY, date):返回数字(默认 1=星期日,7=星期六)
示例:
SELECT DATEPART(WEEKDAY, '2025-04-05') AS day_number, -- 返回 7(星期六) DATENAME(WEEKDAY, '2025-04-05') AS day_name; -- 返回 Saturday
4. 获取中文星期(通用思路)
多数数据库不直接返回中文星期,可通过 CASE 语句转换:
SELECT CASE DATE_FORMAT('2025-04-05', '%W') WHEN 'Monday' THEN '星期一' WHEN 'Tuesday' THEN '星期二' WHEN 'Wednesday' THEN '星期三' WHEN 'Thursday' THEN '星期四' WHEN 'Friday' THEN '星期五' WHEN 'Saturday' THEN '星期六' WHEN 'Sunday' THEN '星期日' END AS chinese_weekday;
基本上就这些方法,根据你使用的数据库选择对应函数即可。注意各数据库对“一周从哪天开始”的定义可能不同,必要时可调整设置。
mysql oracle 2025 sql mysql date sqlite oracle postgresql 数据库