用于在动态中格式化日期的 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)"
我的 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)"