转换前的SQL Server ISDATE返回错误"从字符串转换日期和/或时间时转换失败"

时间:2014-04-16 00:50:01

标签: sql sql-server date

我被赋予了在定义为Varchar(50)的字段上转换日期的任务。正如预期的那样,列中的日期有点偏离正常格式,如DECEMBER 11, 2011

我使用了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,所以我迷失了为什么会发生这种情况。

任何建议都会有所帮助。

谢谢

2 个答案:

答案 0 :(得分:0)

我猜你的date_arrested可能是一个smalldatetime字段会抛出ISDATE()找不到的错误,因为它假设你正在检查datetime字段。你可能需要这样做:

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

答案 1 :(得分:0)

你应该使用正确的语言和日期格式与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)