【问题标题】:CONVERT issue in sqlserver with Msg 529 errorsqlserver 中的 CONVERT 问题,带有 Msg 529 错误
【发布时间】:2017-01-24 15:27:25
【问题描述】:
select CONVERT(datetime,value,103) from results

这个语句给了我一个错误

"Msg 529, Level 16, State 2, Line 1
Explicit conversion from data type text to datetime is not allowed."

RESULTS 表中的VALUE 列数据类型为TEXT。

我怎样才能克服上述问题。请帮忙!

【问题讨论】:

    标签: sql sql-server-2008 sql-server-2012


    【解决方案1】:

    您无法从 text 转换为 datetime

    您必须应用两个转换操作。

    第一个:从文本到varchar

    第二个:从varchar到datetime

    所以你的查询会变成:

    SELECT CONVERT(datetime,
           CONVERT(varchar(30),value), 103)
    FROM results
    

    另外:text 数据类型已被新版本的 Sql Server 弃用,因此我强烈建议您将数据类型 text 更改(如果可以)为 varchar(max)

    应用更改的 DDL 代码是:

    ALTER TABLE results ALTER COLUMN value varchar(max)
    

    【讨论】:

    • 当我使用上述查询时,我收到错误消息“从字符串转换日期和/或时间时,消息 241,级别 16,状态 1,行 1 转换失败。”
    • 请发布您的日期格式。我在你写的问题中使用了 103
    【解决方案2】:

    您需要先将text 转换为nvarchar。试试:

    select convert(datetime, convert(varchar(30),value), 103) from results
    

    备注:见How to convert text column to datetime in SQL

    【讨论】:

    • 当我使用上述查询时,我收到错误消息“从字符串转换日期和/或时间时,消息 241,级别 16,状态 1,行 1 转换失败。”
    【解决方案3】:

    text 转换为float

    CONVERT (float, CONVERT (varchar(20), text_column))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-28
      • 1970-01-01
      • 2019-03-29
      • 2011-05-08
      • 2016-08-03
      相关资源
      最近更新 更多