【问题标题】:Conversion failed when converting date and/or time from character string Error从字符串转换日期和/或时间时转换失败错误
【发布时间】:2016-12-30 18:58:14
【问题描述】:
Select CONVERT(Date, '13-5-2012')

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

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

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

【问题讨论】:

    标签: tsql sql-server-2008-r2


    【解决方案1】:

    指定您使用的日期格式:

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

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

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

    【讨论】:

      【解决方案2】:

      一般来说,我怀疑通常列中存在无法转换的数据,并且会先使用 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
      

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

      【讨论】:

        【解决方案3】:

        试试这个....

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

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

        【讨论】:

        • 我已经测试过了,它可以工作,但我在一个表中有几百行,列中有 '13-5-2012' 格式的值,我想更改该列的数据类型nvarchar(255) 到日期,但由于 '13-5-2012' 值,它不接受。所以我想运行一个更新语句,将 '13-5-2012' 转换为 '5-13-2012'
        【解决方案4】:

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

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

        SELECT CONVERT(DATE, CONVERT(CHAR(8), FieldName)) FROM 数据库名称 WHERE ISDATE(FieldName) 0

        【讨论】:

          【解决方案5】:

          转换时需要给出日期格式,这样可以解决错误。

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-04-17
            • 2017-12-07
            相关资源
            最近更新 更多