SSIS格式日期YYYYMMDD,日偏移量为X天?

时间:2011-11-28 20:50:19

标签: sql-server-2008 tsql datetime ssis datetimeoffset

以下评估会给我一个yyyymmdd格式的日期作为int。

我需要做的是让SSIS能够将日期抵消X天,并相应地保持月份和年份的偏移。

我似乎无法找到答案。每个人都有一个关于如何格式化它的例子,但如果你需要用天,月或年的偏移来格式化它,同时保持所有部分的准确性。

RIGHT((DT_STR,4,1252)YEAR(DATEADD("dd",0,getdate())),4) +""+
RIGHT("0"  +(DT_STR,4,1252)MONTH(DATEADD("dd",-1,getdate())),2)+""+
RIGHT("0" +(DT_STR,4,1252)DAY(DATEADD("dd",0,getdate())) ,2)

任何?

在C#或TSQL中这很容易,但这个SSIS让我的耐心变得越来越轻。

感谢。

3 个答案:

答案 0 :(得分:3)

这是一个可能的解决方案,可以让您实现这一目标。

在SSIS包中,声明四个包范围变量。

  1. TodaysDate - DateTime类型的变量。设置为DateTime时,将为变量分配当前日期和时间。您也可以更改此设置并将其设置为您选择的日期。

  2. OffsetValue - 类型Int32的变量。这将保持偏移值。对于此示例,我选择偏移值以天为单位。所以,我已将其设置为值7。

  3. OffsetDate - DateTime类型的变量。选择此变量,然后按F4查看属性。将属性 EvaluateAsExpression 更改为True。将表达设置为值DATEADD( "dd", @[User::OffsetValue] , @[User::TodaysDate] )。此表达式将偏移值添加到变量TodaysDate,以便获得新的OffsetDate。

  4. FormattedDate - String类型的变量。选择此变量,然后按F4查看属性。将属性 EvaluateAsExpression 更改为True。将表达设置为以下值

  5. RIGHT((DT_STR,4,1252)YEAR(DATEADD("dd",0, @[User::OffsetDate] )),4) +""+ RIGHT("0" +(DT_STR,4,1252)MONTH(DATEADD("dd",-1,@[User::OffsetDate])),2)+""+ RIGHT("0" +(DT_STR,4,1252)DAY(DATEADD("dd",0,@[User::OffsetDate])) ,2)

    唯一的区别是你要格式化你选择的日期,在这种情况下是变量OffsetDate中的值。此变量将保留已经抵消的日期。

    以下屏幕截图显示了一个示例。变量TodaysDate设置为11/28/2011。向变量添加7天会将字段OffsetDate设置为12/05/2011。如您所见,变量FormattedDate将新偏移的日期格式化为20111205

    通过消除变量 TodaysDate ,也可以使用一个更少的变量来完成此示例。您还可以为每种类型(如天,月和年)设置一个偏移量变量。这一切都取决于人们的偏好。

    Example

    我希望这正是您所寻找的,并且可能会让您了解如何实现这一目标。

答案 1 :(得分:1)

我个人的偏好是在脚本任务中进行日期操作和格式化。 (假设您使用的是SSIS 2008,则可以使用C#编写脚本任务。)

答案 2 :(得分:1)

"C:\\inetpub\\logs\\LogFiles\\W3SVC2\\u_ex" + 
    RIGHT("0" + (DT_STR,4,1252)DATEPART( "yy" , DATEADD( "dd" , -1, getdate() ) ), 2) +
    RIGHT("0" + (DT_STR,4,1252)DATEPART( "mm" , DATEADD( "dd" , -1, getdate() ) ), 2) +
    RIGHT("0" + (DT_STR,4,1252)DATEPART( "dd" , DATEADD( "dd" , -1, getdate() ) ), 2) + ".log"