You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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'测试:

  1. 用CHARINDEX拿到'A'的位置是第10位
  2. 截取前9位得到子串'9;1;test;'
  3. 原子串长度为9,替换所有分号后得到'91test',长度为6
  4. 差值为3,和实际分号个数一致

扩展说明

  • 如果需要同时匹配小写'a',将CHARINDEX('A', 你的字符串列名)修改为CHARINDEX('A', UPPER(你的字符串列名))即可
  • 如果字符串中存在多字节字符(比如中文),可以将LEN替换为DATALENGTH做对应调整

内容的提问来源于stack exchange,提问作者vincevangone

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 01:27:05