在 SQL 查询中,处理日期和时间是非常常见的需求。DATE_FORMAT 函数用于将日期时间字段格式化为指定字符串,NOW 函数则用来获取当前的日期和时间。掌握这两个函数,可以轻松完成报表展示、时间筛选等任务。

DATE_FORMAT 函数基础
DATE_FORMAT 函数的语法如下:
-- 将日期格式化为 年-月-日 时:分:秒 SELECT DATE_FORMAT(created_at, '%Y-%m-%d %H:%i:%s') AS fmt_time FROM orders;
其中格式符含义:%Y 代表四位年份,%m 是两位月份,%d 是两位日期,%H 是24小时制小时,%i 是分钟,%s 是秒。
NOW 函数获取当前时间
NOW 函数不需要参数,直接返回执行时的日期时间:
-- 获取当前日期时间 SELECT NOW() AS current_time;
两者结合的实际应用
我们可以在插入记录时用 NOW 填时间,查询时用 DATE_FORMAT 美化输出:
-- 插入一条带当前时间的记录
INSERT INTO logs (msg, log_time) VALUES ('user login', NOW());
-- 查询今天的所有日志,并按美观格式显示
SELECT msg, DATE_FORMAT(log_time, '%Y年%m月%d日 %H时%i分') AS show_time
FROM logs
WHERE DATE(log_time) = DATE(NOW());
常用格式符对照
| 格式符 | 说明 | 示例 |
|---|---|---|
| %Y | 四位年份 | 2024 |
| %m | 两位月份 | 03 |
| %d | 两位日期 | 09 |
| %H | 24小时制小时 | 14 |
| %i | 分钟 | 05 |
在条件中使用注意事项
如果对字段使用 DATE_FORMAT 再比较,会让索引失效。建议用范围查询代替:
-- 推荐写法:利用时间范围 SELECT * FROM orders WHERE created_at >= DATE(NOW()) AND created_at < DATE(NOW()) + INTERVAL 1 DAY;
合理搭配 DATE_FORMAT 与 NOW,既能满足展示需要,也能兼顾查询性能。
SQLDATE_FORMATNOW修改时间:2026-07-26 23:18:17