将字符串变量转换为Datetime在SSIS中返回不正确的值

时间:2011-09-13 02:57:15

标签: sql sql-server ssis

https://stackoverflow.com/questions/7387418/where-clause-using-date-taken-from-string-variable-sent-out-incorrect-return-in-s中关注我的问题,这是问题的简化版本:

用于OLE DB源的查询是这样的,其中包含字符串类型变量:

select
  *
from
  A
where
  A.A_IN_DATETIME < CONVERT(DATETIME,?,105) and
  (A.A_OUT_DATETIME is NULL or A.A_OUT_DATETIME >= CONVERT(DATETIME,?,105))

上面的查询在Foreach变量枚举器内部工作,使用的变量是一个由此组成的字符串变量数组:13-09-2011,12-09-2011,11-09-2011,10-09-2011 ,09-09-2011,08-09-2011,07-09-2011,06-09-2011,05-09-2011,04-09-2011,03-09-2011,02-09-2011,01 -09-2011

问题的条件是:例如,A中有A_IN_DATETIME = 2011-09-12(YYYY-MM-DD格式)和A_OUT_DATETIME = NULL的记录。

上面查询的正确结果是它应该只返回13-09-2011的值而其余的返回0记录,但在执行中,有一个结果为12-09-2011到10-09 -2011也。我不知道SSIS是否错误地将12-09-2011,11-09-2011,10-09-2011错误到09-12-2011,09-11-2011,09-10-2011(仅供参考,我,我已经通过在脚本任务生成的消息框中将其打印出来来检查解析结果以及循环枚举器,并且它仍然是正确的形式。)

这个问题有解决办法吗?

2 个答案:

答案 0 :(得分:0)

运行Sql Profiler并查看SQL Server发出的查询。这将允许您在SSMS中重新运行完全查询并在那里查看结果。

答案 1 :(得分:0)

我认为转换为DATETIME不接受格式,即105。请尝试相反:

CONVERT(DATETIME, '9/13/2011 15:37:00')

结果是DATETIME - 2011-09-13 15:37:00.000