【问题标题】:Msg 241, Level 16, State 1, Line 1 Conversion failed when converting date and/or time from character string消息 241,级别 16,状态 1,第 1 行从字符串转换日期和/或时间时转换失败
【发布时间】:2020-05-27 13:33:47
【问题描述】:

我有两个 T-SQL 查询,它们使用 SubstringCharindex 来解析 nvarchar 列中的文本。他们自己执行,但是当我尝试联合他们时,我得到:

消息 241,第 16 级,状态 1,第 1 行
从字符串转换日期和/或时间时转换失败。

我认为这可能是因为 datetime 转换错误,所以我从这段代码中删除了 cast 语句:

CAST(CONCAT(SUBSTRING(ActivityDetail, CAST((CHARINDEX('Date/Time:', ActivityDetail) + 11) AS INT), 10), SUBSTRING(ActivityDetail, CAST((CHARINDEX('Date/Time:', ActivityDetail) + 23) AS INT), 9)) AS DATETIME) AS 'Start Time'

我再次运行查询并收到此错误:

消息 8114,第 16 级,状态 5,第 1 行
将数据类型 varchar 转换为 bigint 时出错。

没有在我的代码中尝试将 varchar 转换为 bigintCAST 语句。

确实有一个窗口函数,它使用创建的 datetime 列来分配行号,以便我可以过滤 rn=1,这是最近的结果。

ROW_NUMBER() OVER (PARTITION BY [UnitId] ORDER BY [Start Time] DESC, UnitID DESC) AS rn

我做错了什么?

可以提供更多代码,但大部分看起来像这样:

CASE 
WHEN SUBSTRING([ActivityDetail],cast((CHARINDEX('Laser A BkGnd Brightness',[ActivityDetail]) - 15) as int),1) = '1' THEN SUBSTRING([ActivityDetail],cast((CHARINDEX('Laser A BkGnd Brightness',[ActivityDetail]) - 15) as int),3)
ELSE SUBSTRING([ActivityDetail],cast((CHARINDEX('Laser A BkGnd Brightness',[ActivityDetail]) - 14) as int),2)
END as 'Laser A Background Brightness'

【问题讨论】:

    标签: sql-server datetime casting substring charindex


    【解决方案1】:

    发布后搜索第二个错误。与两个查询中列的顺序有关。

    有一个查询:

    SELECT *, rn FROM
    

    另一个是:

    SELECT rn, * FROM
    

    【讨论】:

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