github

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 通常不影响索引使用
posted @ 2026-06-04 10:50  博讯科技工作室  阅读(18)  评论(0)    收藏  举报

赣州博讯科技工作室

©2019

回到顶部
回到底部
公众号 视博web工作室