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

In SSIS expression how can we store only date from getdate()

我想将 getdate()-1 中的日期存储在 SSIS 变量中。

就像我们 运行 sql 查询

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

Output - 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

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

你快到了。

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

其次,获取前一天的语法稍微复杂一些: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)

解决方案

您可以简单地使用以下表达式来实现:

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

它将return 仅使用以下格式的日期2017-11-11 (昨天日期)

说明

据此Microsoft Document

When a string is cast to a DT_DATE, or vice versa, the locale of the transformation is used. However, the date is in the ISO format of YYYY-MM-DD, regardless of whether the locale preference uses the ISO format


旁注:其他方法可能有效,但如果日期或月份小于 10,则使用 datepart 函数 (DATEPART, YEAR, MONTH, DAY) 时会出现问题另一种日期格式(即 2017-1-3 -> yyyy-M-d 或 2017-10-1 -> yyyy-MM-d)。所以你必须将它们与其他方法一起使用来解决这个问题(即RIGHT("0" + (DT_STR,50,1256)DAY([Column0]),2)