1

下面的评估将给我一个日期设置为格式 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 让我越来越耐心。

谢谢。

4

3 回答 3

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。将表达式设置为以下值

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)

唯一的区别是您正在格式化您选择的日期,在这种情况下是 variable 中的值OffsetDate。该变量将保存已经偏移的日期。

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

通过消除变量TodaysDate也可以使用少一个变量来完成此示例。您还可以为每种类型(如日、月和年)设置一个偏移变量。这一切都归结为一个人的喜好。

例子

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

于 2011-11-28T21:24:32.300 回答
1

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

于 2011-12-01T02:07:30.040 回答
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"
于 2012-07-26T07:20:54.243 回答