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

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

“从字符串转换日期和/或时间时转换失败”

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

4

5 回答 5

11

指定您使用的日期格式:

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

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

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

于 2012-06-13T09:06:50.610 回答
4

一般来说,我怀疑通常存在无法在列中转换的数据,并且会使用 case 语句首先检查它是否可转换:

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

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

我怀疑如果您将日期格式设置为dmy它会理解:

SET DATEFORMAT dmy
GO

如果即使那样它也不起作用,您也找不到与您的数据匹配的样式,并且如果您的数据格式一致,则需要手动字符串操作来构建它(如果您能提供帮助,请不要这样做它)。

于 2012-06-13T09:06:21.667 回答
0

试试这个....

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

使用“mm-dd-yyyy”格式。

于 2012-06-13T08:57:09.043 回答
0

CONVERT 假定原始数据可以表示日期。一个错误的数据项可能会引发与此处提到的相同的转换错误,而不会指出问题所在。

使用 ISDATE 帮助我绕过了错误的数据项。

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

于 2014-09-15T22:01:12.050 回答
0

You need to give the date format while conversion, this will resolve the error.

select convert(date, '13-5-2012' ,103)

于 2016-12-30T10:58:14.710 回答