0

使用 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()))

问题:月份或年份更改时不准确。有没有更好的方法来做到这一点?帮助将不胜感激。谢谢。

4

1 回答 1

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)
于 2013-01-11T20:56:21.250 回答