2014-04-16 69 views
0

我已被賦予轉換日期的任務定義爲Varchar(50)的字段。正如預期的那樣塔內日期是有點不正常格式,這樣DECEMBER 11, 2011SQL Server ISDATE轉換前返回錯誤「轉換日期和/或時間從字符串轉換失敗」

我用ISDATE(datefield),但它說,從字符串轉換日期和/或時間時

轉換失敗

我的第二個選擇是使用此語句

UPDATE dbo.tbl_arrest_information 
SET date_arrested = CASE 
         WHEN ISDATE(date_arrested) > 0 
         THEN CONVERT(datetime, date_arrested) 
         ELSE '01/01/1901' 
        END 

我用'01更新列/ 01/1901' ,因爲它不接受空值,但它返回一個錯誤,指出

字符串或二進制數據將被截斷

我清楚地知道,日期字段的長度50,所以我迷失在爲什麼它正在發生。

任何意見將是有益的。

謝謝

+0

如果'date_arrested'是一個varchar字段,那麼爲什麼在轉換時轉換爲'datetime'呢? – Bharadwaj

+0

是不是正確的檢查,如果它做任何事情之前有效的日期?你會怎麼建議? – angelogogo

+0

嘗試'THEN date_arrested'。而不是'然後CONVERT(datetime,date_arrested)' – Bharadwaj

回答

0

我要去猜測,你date_arrested可能是一個SMALLDATETIME場,這將拋出ISDATE()不會找到,因爲它假定你檢查時間字段錯誤。您可能需要做這樣的事情:

UPDATE dbo.tbl_arrest_information 
SET date_arrested = 
    CASE WHEN ISDATE(date_arrested) > 0 
     THEN CASE WHEN date_arrested BETWEEN '1900-01-01' AND '2079-06-05' THEN CONVERT(datetime, date_arrested) ELSE '01/01/1901' END 
     ELSE '01/01/1901' END 
+0

我會試一試,但在查詢數據時會有這樣的結果,它有類似這種類型的日期2012年10月4日將mssql識別它? – angelogogo

+0

date_arrested是一個varchar字段,這就是爲什麼我使用isdate()函數 – angelogogo

+0

您的建議同樣的錯誤 – angelogogo

0

你應該使用正確的語言和DATEFORMAT隨着ISDATE()

SET LANGUAGE us_english; 
SET DATEFORMAT mdy; 
SELECT ISDATE('04/15/2008'); --Returns 1.  

返回1

SET LANGUAGE us_english; 
SET DATEFORMAT myd; 
SELECT ISDATE('15/04/2008'); --Returns 0. 

而且使用convert(1,2 ,3)

相關問題