用于在动态中格式化日期的 SSIS 查找表达式 SQL

SSIS Lookup Expression for Formatting a Date in Dynamic SQL

我的 SSIS 包中有一个变量。

@LastFridayDateTime = Datetime Datatype = DATEADD("hh",17,(DT_DBTIMESTAMP) (   (DT_STR,30,1252) (DT_DBDATE) (DATEADD("dd", -1 - (DATEPART("dw", getdate()) % 7), getdate()) ) ) )

这给了我一个值 = 6/14/2019 5:00:00 PM

现在我正在尝试对我的 SSIS 查找表达式使用动态 Select 查询。 为此,我在控制流中,单击我的数据流任务--> 属性--> 表达式--> [Lookup].sqlcommand 并绑定我的 Select 查询。

"SELECT No, Date_tran
FROM  TABLE
WHERE Date_tran  >= " + (DT_STR,20,1252) @[User::LastFridayDateTime] 

计算结果为

SELECT No, Date_tran
FROM  TABLE
WHERE Date_tran  >= 6/14/2019 5:00:00 PM 

因此,我猜是由于 5:00:00 下午,它无法正常工作。 我的问题是, 我希望这个日期采用这种格式 '6/14/2019 5:00:00' 而不是 6/14/2019 5:00:00 PM 以便查询可以编译和执行。

我认为您只需要将表达式中的日期时间值用单引号括起来:

"SELECT No, Date_tran
FROM  TABLE
WHERE Date_tran  >= '" + (DT_STR,20,1252)@[User::LastFridayDateTime] + "'"

编辑: 果然,您需要先将 datetime 变量转换为 DT_DBTIMESTAMP,然后再将其再次转换为字符串。我有没有提到我有多喜欢 67 组不同的 SSIS 数据类型?

虽然看起来很荒谬,但这应该可行:

"SELECT No, Date_tran
FROM  TABLE
WHERE Date_tran  >= '" + (DT_STR,20, 1252)(DT_DBTIMESTAMP) @[User::LastFridayDateTime] + "'"

尝试以下命令:

"SELECT No, Date_tran
FROM  TABLE
WHERE Date_tran  >= CONVERT(DATETIME,'" + (DT_STR,20,1252) @[User::LastFridayDateTime]  + "',102)"

如果102没有成功,您可以参考以下文章获取相关格式编号:

"SELECT No, Date_tran
FROM  TABLE
WHERE Date_tran  >= CAST('" + (DT_STR,20,1252) @[User::LastFridayDateTime]  + "' AS DATETIME)"