SSIS格式日期日期Yyyymmdd,X天的偏移?
-
25-10-2019 - |
题
以下评估将使我将日期设置为格式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软件包中,声明四个软件包范围变量。
今天的日期 - 类型变量
DateTime
. 。当您设置为DateTime时,将使用当前日期和时间分配变量。您还可以更改此内容并将其设置为您选择的日期。偏离值 - 类型变量
Int32
. 。这将保持偏移值。在此示例中,我选择的偏移值是按天数。因此,我将其设置为7。抵消 - 类型变量
DateTime
. 。选择此变量,然后按F4查看属性。更改属性 评估XPRESSION 至True
. 。设置 表达 值DATEADD( "dd", @[User::OffsetValue] , @[User::TodaysDate] )
. 。该表达式将偏移值添加到变量todaysdate中,因此您可以获得新的OffsotDate。formatteddate - 类型变量
String
. 。选择此变量,然后按F4查看属性。更改属性 评估XPRESSION 至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)
唯一的区别是您正在格式化您选择的日期,在这种情况下,可变的值 OffsetDate
. 。该变量将保留已经被抵消的日期。
下面的屏幕快照显示了样本。变量todaydate设置为 11/28/2011
. 。将7天添加到变量将字段offsetdate设置为 12/05/2011
. 。如您所见,可变格式格式的新偏移日期 20111205
.
此示例也可以完成 一 通过消除变量来减少变量 今天的日期. 。您还可以在每种类型的几天,几个月和几年中都有一个偏移变量。这一切都归结为一个偏好。
我希望这是您想要的,可能会使您了解如何实现这一目标。
其他提示
我个人的偏爱是在脚本任务中执行日期操作和格式化。 (假设您使用的是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"