T-SQL如何统计字符串中指定字符'A'之前的分号数量
T-SQL 统计字符'A'前分号总个数实现方案
核心逻辑
先获取字符'A'首次出现的位置,截取该位置之前的子串,再统计子串内分号的数量即可。
通用兼容写法(支持所有SQL Server版本)
适用于所有SQL Server版本,默认仅处理包含'A'的行,避免计算错误:
SELECT 你的字符串列名, LEN(LEFT(你的字符串列名, CHARINDEX('A', 你的字符串列名) - 1)) - LEN(REPLACE(LEFT(你的字符串列名, CHARINDEX('A', 你的字符串列名) - 1), ';', '')) AS A之前的分号个数 FROM 你的数据表名 WHERE CHARINDEX('A', 你的字符串列名) > 0
兼容无'A'行的写法
如果需要保留所有行,无'A'时返回0或者NULL,可以用条件判断规避报错:
SELECT 你的字符串列名, IIF( CHARINDEX('A', 你的字符串列名) > 0, LEN(LEFT(你的字符串列名, CHARINDEX('A', 你的字符串列名) - 1)) - LEN(REPLACE(LEFT(你的字符串列名, CHARINDEX('A', 你的字符串列名) - 1), ';', '')), 0 -- 无'A'时的返回值,可自行修改为NULL ) AS A之前的分号个数 FROM 你的数据表名
效果验证
拿示例字符串'9;1;test;A;11002'测试:
- 用
CHARINDEX拿到'A'的位置是第10位 - 截取前9位得到子串
'9;1;test;' - 原子串长度为9,替换所有分号后得到
'91test',长度为6 - 差值为3,和实际分号个数一致
扩展说明
- 如果需要同时匹配小写'a',将
CHARINDEX('A', 你的字符串列名)修改为CHARINDEX('A', UPPER(你的字符串列名))即可 - 如果字符串中存在多字节字符(比如中文),可以将
LEN替换为DATALENGTH做对应调整
内容的提问来源于stack exchange,提问作者vincevangone
相关产品推荐
相关产品推荐

