繁体   English   中英

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

[英]SQL Server ISDATE before conversion returns error “Conversion failed when converting date and/or time from character string”

我已经完成了在定义为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,所以我不知道为什么会这样。

任何建议都会有所帮助。

谢谢

我猜您的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

您应该对ISDATE()使用正确的语言和DATEFORMAT

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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM