Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2008 SSIS表达式要查找上一个星期五_Sql Server 2008_Ssis - Fatal编程技术网

Sql server 2008 SSIS表达式要查找上一个星期五

Sql server 2008 SSIS表达式要查找上一个星期五,sql-server-2008,ssis,Sql Server 2008,Ssis,我使用SQLServer2008构建了一个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) + "

我使用SQLServer2008构建了一个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()))
问题:当月份或年份发生变化时,该值不准确。有没有更好的办法?我们将不胜感激。谢谢。

这行吗(你可以用
@date
代替
@date()
,我只是用它来轻松测试不同的日期)

更新#2:以下是如何返回任何日期的前一个星期五,而不仅仅是星期一

SELECT DATEADD(DAY, -1 - (DATEPART(weekday, @date) % 7), @date)

能否提供一周中当前日期和所需日期之间的映射?因此:星期一->星期五,星期二->星期五等是否总是下一个星期五?变量的值应为'01/11/13'作为今天的日期。如果今天是星期一(01/14/13),变量将是'01/11/03',另一个例子:如果今天是'04/01/13'星期一,变量将是'03/29/13'。基本上,如果当前日期在周一,变量需要向后移动3天。如果当前日期不是星期一,则将当前日期作为值。您的业务规则是,如果提供的日期是星期一,则将该值设置为前一个星期五的日期。如果你知道今天是星期一,为什么不能执行一个简单的
DATEADD(“dd”,-3,GETDATE())
?让
DATEADD()
计算出正确的月份和年份转换。不需要将其分解为更小的部分,是吗?SSIS变量是DateTime类型的还是将其存储为字符串?如果是后者,这个要求有什么具体原因吗?我使用这个动态变量作为存储过程的参数,这个变量类型是date。当对变量使用上面的表达式时,存储过程如何不起作用。请告知
DATEPART("dw", GETDATE()) != 2?
GETDATE():
DATEADD("dw", -3, GETDATE())
SELECT DATEADD(DAY, -1 - (DATEPART(weekday, @date) % 7), @date)