我对Sybase数据库运行以下查询,该数据库用于选择前两个工作日;忽略周末(我们不关心假期)。除了星期一,查询只能返回上一个星期五的日期 - 在星期二工作时运行查询,返回星期一和前一个星期五。我一整天都在盯着它,不知道为什么;任何人都可以帮忙吗?不幸的是,在这种情况下,我无法使用日历表。
SELECT dateadd(dd, CASE DATEPART(dw, getdate())
WHEN 1 THEN -2
WHEN 2 THEN -3 ELSE -1
END, CONVERT (VARCHAR (10), dateadd(day, 0 getdate()), 102)), (SELECT dateadd(dd, CASE DATEPART(dw, CONVERT (VARCHAR (10), dateadd(day, -1, getdate()), 102))
WHEN 1 THEN -2
WHEN 2 THEN -3 ELSE -1
END, CONVERT (VARCHAR (10), dateadd(day, -1, getdate()), 102)))
非常感谢任何帮助!
答案 0 :(得分:1)
我想也许你的逻辑有点瑕疵(可能不必要地复杂)。
我测试了这个(周一为set datefirst 1
作为一周的第一天),它返回了周一到周五的正确日期。
逻辑说如果星期一或星期二(所以星期一 - >星期四和星期二 - >星期五)扣除4天,否则2日为最早的日期,如果星期一为第二个,则扣除3天(所以星期一 - >周五)否则扣除1天。
如果你的一周没有在星期一开始,但也许星期日(作为默认的美国设置),你将不得不相应地调整扣除。
试试这个:
SELECT
DATEADD(
dd,
CASE DATEPART(dw, GETDATE())
WHEN 1 THEN -4
WHEN 2 THEN -4
ELSE -2
END,
CONVERT (VARCHAR (10), dateadd(day, 0 ,GETDATE()), 102)
) AS [Two days previous]
,
DATEADD(
dd,
CASE DATEPART(dw, GETDATE())
WHEN 1 THEN -3
ELSE -1
END,
CONVERT (VARCHAR (10), DATEADD(DAY, 0, GETDATE()), 102)
) AS [One day previous]
Sample SQL Fiddle(使用MS SQL,但在这方面我认为它在功能上与Sybase相似)。