DATEADD
DATEADD 是 SQL Server 中用于对日期进行加减运算的核心函数。它的基本语法是:
DATEADD(日期部分, 增量数值, 起始日期)
常用日期部分参数
| 日期部分 | 缩写 | 说明 |
|---|---|---|
| year | yy, yyyy | 年 |
| quarter | qq, q | 季度 |
| month | mm, m | 月 |
| day | dd, d | 天 |
| week | wk, ww | 周 |
| hour | hh | 小时 |
| minute | mi, n | 分钟 |
| second | ss, s | 秒 |
常见用法示例
1. 未来日期(正数)
-- 7天后
SELECT DATEADD(DAY, 7, GETDATE())
-- 3个月后
SELECT DATEADD(MONTH, 3, GETDATE())
-- 1年后
SELECT DATEADD(YEAR, 1, GETDATE())
2. 过去日期(负数)
-- 30天前
SELECT DATEADD(DAY, -30, GETDATE())
-- 2小时前
SELECT DATEADD(HOUR, -2, GETDATE())
3. 配合 WHERE 查询时间段
-- 最近7天的数据
SELECT * FROM 订单表
WHERE 下单时间 >= DATEADD(DAY, -7, GETDATE())
-- 最近30天
SELECT * FROM 日志表
WHERE 创建时间 >= DATEADD(DAY, -30, GETDATE())
-- 上个月的数据
SELECT * FROM 销售表
WHERE 销售日期 >= DATEADD(MONTH, -1, GETDATE())
AND 销售日期 < GETDATE()
4. 获取月初、月初第一天
-- 本月第一天
SELECT DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()), 0)
-- 上个月第一天
SELECT DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()) - 1, 0)
-- 下个月第一天
SELECT DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()) + 1, 0)
5. 去除时间部分(只保留日期)
-- 方法1:使用 DATEADD + DATEDIFF
SELECT DATEADD(DAY, DATEDIFF(DAY, 0, GETDATE()), 0)
-- 方法2:CAST 转换(SQL Server 2008+)
SELECT CAST(GETDATE() AS DATE)
实用技巧
查询当前周的起始(周一为第一天)
-- 本周一
SELECT DATEADD(WEEK, DATEDIFF(WEEK, 0, GETDATE()), 0)
查询某个月的完整数据(忽略时间)
DECLARE @StartDate DATE = '2024-05-01'
DECLARE @EndDate DATE = DATEADD(MONTH, 1, @StartDate)
SELECT * FROM 表名
WHERE 日期字段 >= @StartDate
AND 日期字段 < @EndDate -- 使用 < 而非 <= 来包含整个月
注意事项
- 保持数据类型一致:
DATEADD返回的类型取决于输入类型 - 边界处理:查询时间段时,建议用
>= 开始和< 结束+1而不是BETWEEN - 性能:在 WHERE 中对字段使用
DATEADD通常不影响索引使用
网站:http://shibowl.top
github:https://github.com/hanbinjxnc
博客园:https://www.cnblogs.com/hool
博客:https://blog.shibowl.top
淘宝店:https://boxunwl.taobao.com/
作者:世博 2019年4月28日----
github:https://github.com/hanbinjxnc
博客园:https://www.cnblogs.com/hool
博客:https://blog.shibowl.top
淘宝店:https://boxunwl.taobao.com/
作者:世博 2019年4月28日----
浙公网安备 33010602011771号