使用SQL SUBSTRING与CHARINDEX拼接两列字符串片段的问题
问题排查与解决方案
问题原因
原有SQL逻辑错误出在第一个substring截取步骤:
第一列111-1001-0000-0000中存在重复的0000片段,你使用的charindex(right(@1stcolumn,charindex('-',reverse(@1stcolumn))),@1stcolumn)逻辑,是匹配最后一段0000在整串中第一次出现的位置,返回值对应111-1001-的结束位置,所以截取后直接丢失了第一列第三个分段的0000。
修正方案
改用按长度截取的逻辑,规避重复内容导致的匹配错误,直接按分隔符位置计算各分段的截取长度即可。
修正后SQL代码
Declare @1stcolumn nvarchar(30),@2ndcolumn nvarchar(30) set @1stcolumn='111-1001-0000-0000' set @2ndcolumn='453200-0000-000' select -- 取第一列除最后一段外的内容:111-1001-0000 left(@1stcolumn, len(@1stcolumn) - charindex('-', reverse(@1stcolumn))) -- 拼接第二列第一段:453200 + left(@2ndcolumn, charindex('-', @2ndcolumn) - 1) -- 拼接第一列最后一段:0000 + right(@1stcolumn, charindex('-', reverse(@1stcolumn)) - 1) -- 拼接第二列除第一段外的内容:-0000-000 + right(@2ndcolumn, len(@2ndcolumn) - charindex('-', @2ndcolumn) + 1)
运行结果
最终输出和你预期一致:111-1001-0000-453200-0000-0000-000
内容的提问来源于stack exchange,提问作者Krishna
相关产品推荐
相关产品推荐

