使用SQL Server 2008,我已根据当前日期构建了一个具有动态值的SSIS变量。如果当天是星期一,我希望它的价值是星期五,这里是建立的表达式:
DATEPART("dw",GETDATE()) != 2?
RIGHT("0" + (DT_WSTR,2)MONTH(DATEADD("dd", -1, GETDATE())), 2) + "/"
+ RIGHT("0" + (DT_WSTR,2)DAY(DATEADD("dd", -1, GETDATE())), 2) + "/" +
(DT_WSTR,4)YEAR(DATEADD("dd", -1, GETDATE())) : RIGHT("0" + (DT_WSTR,2)MONTH(DATEADD("dd", -1, GETDATE())), 2) + "/"
+ RIGHT("0" + (DT_WSTR,2)DAY(DATEADD("dd", -3, GETDATE())), 2) + "/" +
(DT_WSTR,4)YEAR(DATEADD("dd", -1, GETDATE()))
问题:当月份或年份发生变化时,这是不准确的。有没有更好的方法来做到这一点?帮助将不胜感激。感谢。
答案 0 :(得分:2)
这是否有效(您可以将GETDATE()
替换为@date
,我只是用它来轻松测试不同的日期)
DECLARE @date DATETIME
SET @date = '2013-01-14'
SELECT
PrevFriday = CASE WHEN DATEPART(weekday, @date) <> 2 THEN @date
ELSE DATEADD(DAY, -3, @date)
END
更新:此处相同,但在SSIS变量表达式中完成:
DATEPART("dw", GETDATE()) != 2?
GETDATE():
DATEADD("dw", -3, GETDATE())
更新#2:以下是如何在任何日期返回上周五,而不仅仅是星期一
SELECT DATEADD(DAY, -1 - (DATEPART(weekday, @date) % 7), @date)