在数据库中,对日期时间的处理需求是比较常见的,不同数据库系统(如 MySQL、PostgreSQL、SQL Server、Oracle 等)对日期函数的支持略有差异。下面以MySQL为例,并简要对比其他主流数据库:
一、常用日期时间函数(以MySQl为例)
1. CURDATE() / CURRENT_DATE() / DATE(NOW())
- 功能:返回当前日期
SELECT CURDATE(); — 2026-01-29
SELECT CURRENT_DATE(); — 同上
SELECT DATE(NOW()); — 同上
注意:NOW() 返回完整时间戳(含时分秒),DATE() 提取其中的日期部分,也可以是其他日期时间参数。
2. DATE_FORMAT(date, format)
- 功能:将日期按照指定格式输出为字符串;
- 常用格式符:
- %Y:4位年份(如 2026)
- %y:2位年份(如 26)
- %m:月份(01–12)
- %c:月份(1–12,无前导零)
- %d:日(01–31)
- %H:小时(00–23)
- %i:分钟(00–59)
- %s 或 %S:秒(00–59)
SELECT DATE_FORMAT('2026-01-29', '%Y年%m月%d日');
— 结果:2026年01月29日
SELECT DATE_FORMAT(NOW(), '%Y-%m-%d %H:%i:%s');
— 结果:2026-01-29 14:30:45
注意:DATE_FORMAT( ) 返回的是字符串,不能直接用于日期的比较和计算;
3. DATE_SUB(date, INTERVAL expr unit)
- 功能:从指定日期减去一个时间间隔
- 常用单位:
- DAY, WEEK, MONTH, YEAR
- HOUR, MINUTE, SECOND
- QUARTER, MICROSECOND 等
SELECT DATE_SUB('2026-01-29', INTERVAL 7 DAY);
— 2026-01-22
SELECT DATE_SUB('2026-01-22', INTERVAL -7 DAY);
— 2026-01-29
SELECT DATE_SUB(NOW(), INTERVAL 1 MONTH);
— 当前时间减一个月
二、其他重要日期函数(MySQL)
4. NOW() vs SYSDATE()
- NOW():返回语句开始执行时的时间(固定值,即使函数内多次调用也相同)
- SYSDATE():返回函数执行时的实时时间(可能变化)
SELECT NOW(), SLEEP(2), NOW(); — 两个 NOW() 相同
SELECT SYSDATE(), SLEEP(2), SYSDATE();– 两个 SYSDATE() 相差约2秒
5. DATEDIFF(date1, date2)
- 功能:返回两个日期之间的天数差(仅日期部分,忽略时间)
SELECT DATEDIFF('2026-02-01', '2026-01-29'); — 3
6. TIMESTAMPDIFF(unit, start, end)
- 功能:按指定单位计算两个时间戳的差值(支持年、月、日、小时等)
SELECT TIMESTAMPDIFF(YEAR, '2020-01-01', '2026-01-29'); — 6
SELECT TIMESTAMPDIFF(MONTH, '2025-12-01', '2026-01-29'); — 1
7. STR_TO_DATE(str, format)
- 功能:将字符串按指定格式解析为日期(与 DATE_FORMAT 互为逆操作),常用于导入非标准格式的日期字符串。
SELECT STR_TO_DATE('29/01/2026', '%d/%m/%Y');
— 2026-01-29
8. EXTRACT(unit FROM date)
- 功能:从日期中提取特定部分(如年、月、日等)
SELECT EXTRACT(YEAR FROM '2026-01-29'); — 2026
SELECT EXTRACT(MONTH FROM NOW()); — 1
三、跨数据库对比(简要)
| 当前日期 | CURDATE() | CURRENT_DATE | GETDATE() | SYSDATE |
| 格式化 | DATE_FORMAT() | TO_CHAR() | FORMAT() (2012+) | TO_CHAR() |
| 加减日期 | DATE_ADD(), INTERVAL | + interval '1 day' | DATEADD(day, 1, date) | date + 1 |
| 字符串转日期 | STR_TO_DATE() | TO_DATE() | CONVERT() / CAST() | TO_DATE() |
四、使用建议
WHERE col >= '2026-01-01' AND col < '2027-01-01'
!!注意:具体使用场景根据不同的数据库具体分析,本文只以MySQl数据库举例;




