2011-09-13 85 views
1

繼我在https://stackoverflow.com/questions/7387418/where-clause-using-date-taken-from-string-variable-sent-out-incorrect-return-in-s的問題,這纔是問題的簡化版本:轉換字符串變量爲DateTime返回錯誤值在SSIS

用於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(FYI,I已經通過將腳本任務生成的消息框打印出來,檢查瞭解析結果以及循環枚舉器,並且它仍然處於正確的形式)。

有沒有解決這個問題的方法?

+0

請參閱HTTP ://meta.stackexchange.com/questions/2950/should-hi-thanks-taglines-and-salutations-be-removed-from-posts/ –

回答

0

運行Sql Profiler並查看通過SQL Server進行的查詢。這將允許您重新運行SSMS中的確切查詢並在那裏查看結果。

0

我不相信轉換爲DATETIME接受的格式,即105。嘗試此相反:

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

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

+0

105將DATETIME轉換爲字符串(VARCHAR等)時有效。 –

+0

同意了,我讀了你的評論錯了。正在考慮轉換爲varchar而不是其他方式。 – mservidio

+0

不用擔心...;) –