2011-08-31 64 views
0

我有一個將文本顏色轉換爲日期時間的子查詢。由於它是文本格式,因此存在包含錯誤數據的coloumns。我知道第一個答案是糾正數據,我非常同意這一點。我沒有這個特權,不幸的是我必須處理它。從文本字段轉換日期時間的錯誤

下面

是我的查詢

INNER JOIN TABLE XYZ 
ON XYZ.COLOUMN1=YZX.COLOUMN2 
LEFT JOIN (SELECT ABC.stu_id 
      ABC.stu_name 
      CONVERT(DATETIME,LMN.startDate,111) STARTDATE 
      CONVERT(DATETIME,LMN.endDate,111) ENDDATE 
FROM STUDENT ABC 
INNER JOIN AN_STUDENT_TABLE LMN 
      ON ABC.stu_id=LMN.stu_id 
WHERE ISDATE(startDate)=1 
AND ISDATE(endDate)=1 
GROUP BY ABC.stu_id,ABC.stu_name,STARTDATE,ENDDATE) DIN ON DIN.stu_id=LMNOP.stu_id 
WHERE e.date BETWEEN DIN.STARTDATE AND DIN.ENDDATE 

當我與STARTDATE e.date比較和結束日期的失敗給了我一個衆所周知的錯誤

"The conversion of a varchar data type to a datetime data type resulted in an out-of-range value." 

可以做些什麼來ATLEAST跳過這些壞數據記錄不能轉換? 我盡力解決這個問題,但失敗了。任何幫助/建議appretiated!

+2

'不要使用'CONVERT(DATETIME,LMN.startDate,111)'而不是使用'CONVERT(DATETIME,CASE WHEN ISDATE(LMN.startDate)= 1 THEN LMN.startDate END,111)'並且結束日期相同(也可能是'e.Date',如果這也是一個字符串的話) –

+0

Martin,我今天試過,但結果集中的值比預期的要少。所以我試圖從startDate和endDate的coloumns中找出不良數據。我可以發現許多輸入日期是(09/14/0210,01/23/1200,05/12/1212,09/25/1008,10/01/1001,01/23/1200,10/01/1007,01/01/0201) – palum

+0

我想我必須做一個乏味的工作,找出所有的日期,其中有一個不好的數據。 (它會花費很長時間沒有痛苦沒有增益 – palum

回答

0

您的ISDATE位於where子句中,在轉換中使用它之前不一定會過濾掉不良日期。

我認爲你應該分兩步做。首先創建一個臨時表或表變量,其中包含STUDENT中的行,其中startDateendDate正確(對此使用ISDATE),然後在實際查詢中使用該表。

+0

埃裏克森我不能使用表變量,因爲我要在我的OLEDB數據源中的SSIS包中生成一個excel報告。 – palum

相關問題