从字符串错误转换日期和/或时间时转换失败

时间:2012-06-13 08:53:38

标签: tsql sql-server-2008-r2

Select CONVERT(Date, '13-5-2012')

当我在Management Studio中运行上述T-SQL语句时,我得到以下错误:

“从字符串”

转换日期和/或时间时转换失败

有没有我可以成功地将该值转换为有效的日期类型?我在nvarchar(255)列中有这样的值,其dataType我想在SQL Server表中更改为Date类型但我已经遇到该错误,我想首先在表上的Update语句中进行转换。

5 个答案:

答案 0 :(得分:11)

指定您使用的日期格式:

Select CONVERT(Date, '13-5-2012', 105)

105表示意大利日期格式与世纪(dd-mm-yyyy)。

参考:http://msdn.microsoft.com/en-us/library/ms187928.aspx

答案 1 :(得分:4)

一般情况下,我怀疑通常存在无法在列中转换的数据,并且会使用case语句检查它是否可以转换为:

SELECT CASE WHEN ISDATE(mycolumn)=1 THEN CONVERT(Date, mycolumn, [style]) END
FROM mytable

我相信Convert依赖于SQL Server日期格式设置。请使用DBCC USEROPTIONS检查您的日期格式设置。

我怀疑如果你将dateformat设置为dmy它会理解:

SET DATEFORMAT dmy
GO

如果即使它不起作用,也找不到与您的数据匹配的样式,如果您的数据是一致的格式,那么可以通过手动字符串操作来构建它(如果这样做,则不要这样做你可以帮助它。)

答案 2 :(得分:0)

试试这个......

Select CONVERT(Date,'5-13-2012')

使用'mm-dd-yyyy'格式。

答案 3 :(得分:0)

CONVERT假设原始数据可以表示日期。一个错误的数据项可以抛出相同的转换错误而不指向问题。

使用ISDATE帮助我解决了不良数据项。

SELECT CONVERT(DATE,CONVERT(CHAR(8),FieldName))     FROM DBName     WHERE ISDATE(FieldName)<> 0

答案 4 :(得分:0)

您需要在转换时提供日期格式,这样可以解决错误。

选择转换(日期,' 13-5-2012',103)