【发布时间】:2019-04-05 10:50:59
【问题描述】:
使用 SQL Server,我需要计算出“存储桶开始”日期和“存储桶结束”日期之间的第一个星期二。但是,我的代码返回了错误的日期。
这是我的代码:
SELECT
CONVERT(DATETIME, CONVERT(VARCHAR(10), [BUCKET_START])) AS Bucket_Start,
CONVERT(DATETIME, CONVERT(VARCHAR(10), [BUCKET_END])) AS Bucket_End,
DATEADD(dd, - 6, DATEADD(wk, DATEDIFF(wk, 0, dateadd(dd, 7 - DATEPART(day, CONVERT(DATETIME, CONVERT(VARCHAR(10), [BUCKET_START]))),
CONVERT(DATETIME, CONVERT(VARCHAR(10), [BUCKET_END])))), 0)) AS [1st_Tuesday]
FROM
[BUCKETS]
WHERE
CAT_CODE = 1013
AND BUCKET_START < CONVERT(NVARCHAR, GETDATE(), 112)
AND BUCKET_END > CONVERT(NVARCHAR, GETDATE(), 112)
这些是目前的结果:
Bucket_Start Bucket_End 1st_Tuesday
2019-03-31 2019-04-27 2019-03-26
但是,正确的 1st_Tuesday 是:
Bucket_Start Bucket_End 1st_Tuesday
2019-03-31 2019-04-27 2019-04-02
为什么我的查询仍然在 3 月查找?
感谢您的帮助。
【问题讨论】:
-
如果存储桶开始是星期日,则添加两天,星期一然后添加 1 天,依此类推。
-
@SAS - 不是重复的 - 我只想返回 1 条记录,该链接返回 4
标签: sql-server tsql date dateadd