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

Tsql 从字符串错误转换日期和/或时间时转换失败,tsql,sql-server-2008-r2,Tsql,Sql Server 2008 R2,在Management Studio中运行上述T-SQL语句时,出现以下错误: “从字符串转换日期和/或时间时转换失败” 我是否可以成功地将该值转换为有效的日期类型?我在nvarchar(255)列中有这样的值,我想在SQL Server表中将其数据类型更改为日期类型,但我遇到了该错误,我想首先在表上的Update语句中进行转换。试试这个 Select CONVERT(Date, '13-5-2012') 使用“mm-dd-yyyy”格式。一般来说,我怀疑在一列中通常存在无法转换的数据,并会使

在Management Studio中运行上述T-SQL语句时,出现以下错误:

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

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

试试这个

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

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

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

Select CONVERT(Date,'5-13-2012')
我相信
Convert
依赖于SQL Server日期格式设置。请使用
DBCC USEROPTIONS
检查日期格式设置

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

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

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

指定您使用的日期格式:

SET DATEFORMAT dmy
GO
105表示带世纪的意大利日期格式(dd-mm-yyyy)


Ref:

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

使用ISDATE帮助我避开了坏数据项

选择转换(日期、转换(字符(8)、字段名)) 来自DBName
其中ISDATE(FieldName)0

转换时需要提供日期格式,这将解决错误


选择convert(date,'13-5-2012',103)

我已经测试过了,它可以工作,但我在一个表中有几百行,列中的值为'13-5-2012'格式,我想将该列的数据类型从nvarchar(255)更改为date,但由于'13-5-2012'值,它不被接受。因此,我想运行一个update语句,将“13-5-2012”转换为“5-13-2012”
Select CONVERT(Date, '13-5-2012', 105)