如何使用substring与charindex解析列内容提取行号并创建新列
从WQ_INFORMATION字段提取行号的修正方案
报错原因说明
原有公式报错的核心原因是:
- 固定从第20位查找逗号的逻辑不兼容不同长度的字段内容
- 当指定位置找不到逗号时,
charindex返回0,做减法后得到负数长度,不符合substring函数的参数要求
适配1-4位行号的SQL写法(SQL Server环境)
直接替换原有查询逻辑即可,无需额外调整:
SELECT SUBSTRING( WQ_INFORMATION, CHARINDEX('Line:', WQ_INFORMATION) + 5, ISNULL(NULLIF(CHARINDEX(',', WQ_INFORMATION, CHARINDEX('Line:', WQ_INFORMATION)) - (CHARINDEX('Line:', WQ_INFORMATION) + 5), 0), 4) ) AS Line_Number FROM 你的实际表名
写法优化说明
- 改为从
Line:的结束位置向后查找第一个逗号,适配不同前缀长度的字段内容 - 增加容错判断:当字段中
Line:后没有逗号时,默认取4位字符,刚好适配最长4位行号的需求,避免负长度报错 - 自动适配1-4位任意长度的行号,无需手动调整参数
MySQL环境适配写法
如果你使用的是MySQL数据库,使用以下写法即可:
SELECT SUBSTRING( WQ_INFORMATION, LOCATE('Line:', WQ_INFORMATION) + 5, IF(LOCATE(',', WQ_INFORMATION, LOCATE('Line:', WQ_INFORMATION)) > 0, LOCATE(',', WQ_INFORMATION, LOCATE('Line:', WQ_INFORMATION)) - (LOCATE('Line:', WQ_INFORMATION) + 5), 4 ) ) AS Line_Number FROM 你的实际表名
内容的提问来源于stack exchange,提问作者k38
相关产品推荐
相关产品推荐

