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

时间:2019-06-18 15:49:39

标签: ssis db2 lookup

我的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] .sql命令,然后将“选择”查询绑定。

"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 以便查询可以编译和执行。

2 个答案:

答案 0 :(得分:1)

我认为您只需要在表达式中的datetime值周围加上单引号即可。

"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] + "'"

答案 1 :(得分:0)

尝试以下命令:

Dictionary<string, Dictionary<string, int>> results = intents.ToDictionary(
    item => item.Item1,
    item => item.Item2.Split(new[] {','}, StringSplitOptions.RemoveEmptyEntries)
        .Select(x => x.Trim())
        .GroupBy(x => x)
        .ToDictionary(group => group.Key, group => group.Count()));

如果foreach (var item in results) { Console.WriteLine(item.Key + Environment.NewLine + string.Join(Environment.NewLine, item.Value.Select(v => $" - {v.Key}: {v.Value}")) + Environment.NewLine); } 不起作用,您可以参考以下文章以获取相关的格式编号:

OR

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