在SSIS表达式中,我们如何只存储来自getdate()的日期

时间:2017-11-11 06:33:23

标签: sql sql-server date ssis etl

我希望在SSIS变量中存储来自getdate() - 1的日期。

像我们运行sql查询时那样的东西

select CONVERT(varchar(10),getdate()-1,120)
  

输出 - 2017-11-10

我在表达式中尝试了以下查询。

@[User::Dates]  =  
           (DT_WSTR,4)YEAR(GETDATE())  
+ RIGHT ( "0" + (DT_WSTR,2)MONTH(GETDATE()),2) 
+ RIGHT ( "0" + (DT_WSTR,2)DAY(GETDATE()),2)

它给出了输出

  

20171111

有人能告诉我变量的表达式是什么。我的变量数据类型是字符串

2 个答案:

答案 0 :(得分:2)

解决方案

您只需使用以下表达式即可实现此目的:

 SUBSTRING( (DT_STR,50, 1256)DATEADD("DAY",-1,GETDATE()) , 1, 10)

它将仅返回日期格式为2017-11-11 (昨天日期)

解释

根据此Microsoft Document

"当字符串转换为DT_DATE时,反之亦然,则使用转换的语言环境。但是,无论区域设置首选项是否使用ISO格式"

,日期都采用ISO格式YYYY-MM-DD。

旁注:其他方法可能有效,但使用datepart函数(DATEPART, YEAR, MONTH, DAY)时出现问题,如果日期或月份小于10,则可能有其他日期格式(即2017-1-3 - > yyyy-Md或2017-10-1 - > yyyy-MM-d)。因此,您必须使用其他方法来修复它(即RIGHT("0" + (DT_STR,50,1256)DAY([Column0]),2)

答案 1 :(得分:1)

你几乎就在那里。

首先,您需要添加破折号(简单字符串连接)。

其次,获取前一天的语法稍微复杂一些:SSIS不支持GETDATE() - 1,因此您需要DATEADD("DAY", -1, GETDATE())

以下是您正在寻找的内容:

(DT_WSTR, 4) YEAR(DATEADD("DAY", -1, GETDATE()))
+ "-"
+ RIGHT("0" + (DT_WSTR, 2) MONTH(DATEADD("DAY", -1, GETDATE())), 2) 
+ "-"
+ RIGHT("0" + (DT_WSTR, 2) DAY(DATEADD("DAY", -1, GETDATE())),2)