有没有一种方法可以编写和添加DateAdd和DatePart SSIS表达式以始终使用Getdate()生成ThisWeekMonday的日期?

时间:2019-07-03 19:21:36

标签: ssis expression dateadd datepart

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

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

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

有人可以帮我解决这个问题吗?

谢谢。

1 个答案:

答案 0 :(得分:1)

使用以下表达式:

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

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

例如2(星期一)-6(星期五)= -4,所以在星期五加上-4天就可以得到星期一。

希望这会有所帮助。