我被赋予了在定义为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,所以我迷失了为什么会发生这种情况。
任何建议都会有所帮助。
谢谢
答案 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)