【发布时间】:2020-05-27 13:33:47
【问题描述】:
我有两个 T-SQL 查询,它们使用 Substring 和 Charindex 来解析 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 转换为 bigint 的 CAST 语句。
我确实有一个窗口函数,它使用创建的 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