【问题标题】:SSIS Format Date YYYYMMDD with day offset of X days?SSIS格式日期YYYYMMDD,日期偏移为X天?
【发布时间】:2012-01-08 06:48:06
【问题描述】:

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

谢谢。

【问题讨论】:

  • 您可以执行存储过程并将结果加载到变量中,还是使用脚本任务并在那里设置变量?这似乎是一个更好的解决方案,因为表达式并不是为了处理复杂性而设计的。

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


【解决方案1】:

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

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

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

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

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

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

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,减少一个变量来完成此示例。您还可以为每种类型(如日、月和年)设置一个偏移变量。这一切都取决于个人的喜好。

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

【讨论】:

  • 另外请注意,任何将使用日期变量的东西,您都可能需要设置 delayvalidation,以确保 SSIS 在运行时计算正确的值。
  • Shiva,非常感谢,它确实让我向前迈出了一步!!!非常感谢。
【解决方案2】:

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

【讨论】:

    【解决方案3】:
    "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"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-05-12
      • 1970-01-01
      • 1970-01-01
      • 2018-05-26
      • 1970-01-01
      • 2014-07-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多