我希望在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
有人能告诉我变量的表达式是什么。我的变量数据类型是字符串
答案 0 :(得分:2)
您只需使用以下表达式即可实现此目的:
SUBSTRING( (DT_STR,50, 1256)DATEADD("DAY",-1,GETDATE()) , 1, 10)
它将仅返回日期格式为2017-11-11
(昨天日期)
"当字符串转换为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)