以下评估将使我将日期设置为格式yyyymmdd作为int。

我需要做的事情具有SSI的能力,可以抵消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正在增长我的耐心。

谢谢。

有帮助吗?

解决方案

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

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

  1. 今天的日期 - 类型变量 DateTime. 。当您设置为DateTime时,将使用当前日期和时间分配变量。您还可以更改此内容并将其设置为您选择的日期。

  2. 偏离值 - 类型变量 Int32. 。这将保持偏移值。在此示例中,我选择的偏移值是按天数。因此,我将其设置为7。

  3. 抵消 - 类型变量 DateTime. 。选择此变量,然后按F4查看属性。更改属性 评估XPRESSIONTrue. 。设置 表达DATEADD( "dd", @[User::OffsetValue] , @[User::TodaysDate] ). 。该表达式将偏移值添加到变量todaysdate中,因此您可以获得新的OffsotDate。

  4. formatteddate - 类型变量 String. 。选择此变量,然后按F4查看属性。更改属性 评估XPRESSIONTrue. 。设置 表达 以下值

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. 。该变量将保留已经被抵消的日期。

下面的屏幕快照显示了样本。变量todaydate设置为 11/28/2011. 。将7天添加到变量将字段offsetdate设置为 12/05/2011. 。如您所见,可变格式格式的新偏移日期 20111205.

此示例也可以完成 通过消除变量来减少变量 今天的日期. 。您还可以在每种类型的几天,几个月和几年中都有一个偏移变量。这一切都归结为一个偏好。

Example

我希望这是您想要的,可能会使您了解如何实现这一目标。

其他提示

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

"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"
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top