在业务系统里,订单时间、注册时间、日志时间等字段几乎都离不开日期和时间的处理。无论是统计某段时间内的数据,还是计算用户留存天数,SQL中的日期函数都能帮我们高效完成。下面介绍几种主流数据库中常用的日期处理技巧。

一、获取当前日期和时间
不同数据库获取当前时间的函数略有差异,但用途一致。
- MySQL:
NOW()返回日期加时间,CURDATE()仅返回日期 - PostgreSQL:
CURRENT_TIMESTAMP或NOW() - SQL Server:
GETDATE()
二、日期的加减计算
经常需要计算几天后或几个月前的日期,可以使用对应的日期加减函数。
MySQL示例
-- 当前日期加7天 SELECT DATE_ADD(CURDATE(), INTERVAL 7 DAY) AS next_week; -- 当前日期减1个月 SELECT DATE_SUB(CURDATE(), INTERVAL 1 MONTH) AS last_month;
PostgreSQL示例
-- 当前日期加10天
SELECT CURRENT_DATE + INTERVAL '10 days' AS future_date;
-- 计算两个日期相差天数
SELECT AGE('2024-03-01', '2024-02-01') AS diff;
三、提取日期中的部分信息
有时我们只需要年份、月份或星期,可以用提取函数实现。
| 数据库 | 提取年份 | 提取月份 |
|---|---|---|
| MySQL | YEAR(date) | MONTH(date) |
| SQL Server | DATEPART(year, date) | DATEPART(month, date) |
| PostgreSQL | EXTRACT(YEAR FROM date) | EXTRACT(MONTH FROM date) |
四、日期格式化输出
将日期转为指定格式的字符串,在报表中非常实用。
-- MySQL格式化日期为 年-月-日 时:分:秒 SELECT DATE_FORMAT(NOW(), '%Y-%m-%d %H:%i:%s') AS fmt_time; -- SQL Server格式化 SELECT CONVERT(VARCHAR, GETDATE(), 120) AS fmt_time;
五、按日期范围统计
结合日期函数和条件过滤,可以轻松统计某段时间的数据量。
-- 统计最近30天的订单数(MySQL) SELECT COUNT(*) AS order_cnt FROM orders WHERE create_time >= DATE_SUB(NOW(), INTERVAL 30 DAY);
小结
熟练掌握SQL日期函数,能大幅简化时间相关的查询逻辑。建议在实际项目中多练习上述函数,并根据所用数据库查阅对应的官方文档以了解更丰富的参数用法。