首页 > 解决方案 > 有没有办法编写 DateAdd 和 DatePart SSIS 表达式以始终使用 Getdate() 生成 ThisWeekMonday 的日期?

问题描述

我有一个需要每周一运行的包,因为文件日期都有发送它的每周的星期一日期。如果包由于某种原因失败,我希望我以这样一种方式编写它,以便其他人可以在一周中的任何其他日期重新运行它。无论在哪一天运行,它都必须生成每周星期一的日期以获取正确的文件。

我尝试使用以下表达式,但它在星期一运行时生成了上周的星期一日期:

DATEADD( "dd", -1 - (DATEPART("dw", GETDATE()) + 4) % 7, GETDATE()  ).

我多次更改参数,但仍然无法正常工作。

有人给了我这个表达式,但是即使更改了参数,星期一也完全不起作用:

DATEADD( "dd", (DATEPART( "dw", GETDATE() )  -3), GETDATE()  )  

最后,我尝试使用以下语句,它等效于 SQL 中的 Case 语句,但它在下面显示的每一行的第一部分给了我一个错误(注意:方括号不包括在内。)

[  DATEPART( "dw", GETDATE())  ] 

请参阅下面的完整表达:

DATEPART( "dw", GETDATE())  == 1 ?  DATEADD( "dd", 1, GETDATE()) : (
DATEPART( "dw", GETDATE())  == 2 ?  DATEADD( "dd", 0, GETDATE()) : (
DATEPART( "dw", GETDATE())  == 3 ?  DATEADD( "dd", -1, GETDATE()) :  (
DATEPART( "dw", GETDATE())  == 4 ?  DATEADD( "dd", -2, GETDATE()) :  (
DATEPART( "dw", GETDATE())  == 5 ?  DATEADD( "dd", -3, GETDATE()) :  (
DATEPART( "dw", GETDATE())  == 6 ?  DATEADD( "dd", -4, GETDATE()) :  (
DATEPART( "dw", GETDATE())  == 7 ?  DATEADD( "dd", -5, GETDATE()) ))))))

谁能帮我解决这个问题?

提前致谢。

标签: ssisexpressiondateadddatepart

解决方案


使用以下表达式:

DateAdd("dd", 2 - DatePart("dw", GetDate()) , GetDate()) 

解释一下,2(即星期一)- 一周中的任何其他日子都会为您提供可以添加到当天的日期偏移量。

例如 2(星期一)- 6(星期五)= -4 所以在星期五加上 -4 天给你星期一。

希望这可以帮助。


推荐阅读