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

SQL Server中筛选列值为1个或3个分隔项的行的方法

问题根因

你的查询无法返回预期结果,核心问题有三个:

  • 存在基础语法错误:SELECT子句中Column_1和Column_2之间缺少逗号,语句本身就无法正常执行
  • 匹配使用的分隔符错误:Column_1的实际存储值以分号;作为项之间的分隔符,原查询用空格做匹配规则,和数据实际格式完全不符
  • 匹配逻辑本身存在缺陷:哪怕分隔符是空格,LIKE '% %'会匹配所有包含至少1个空格的字符串,LIKE '% % %'也无法精准识别恰好2个空格的场景,无法准确统计分隔项数量,会出现大量漏判、误判。
解决方案

统计分隔项个数不需要复杂的字符串拆分,利用分隔符计数的逻辑即可实现高性能查询:
分隔项的总个数 = 字段内部分隔符的总数量 + 1
按照你的需求:

  • 1个项对应字段内分号数量为0
  • 3个项对应字段内分号数量为2

分号数量可以直接通过字符串长度差计算:原字段长度减去移除所有分号后的字段长度,就是字段内包含的分号总数。
对应可直接执行的查询语句如下:

SELECT
    Column_1,
    Column_2
FROM TableName
WHERE 
    LEN(Column_1) - LEN(REPLACE(Column_1, ';', '')) = 0
    OR
    LEN(Column_1) - LEN(REPLACE(Column_1, ';', '')) = 2

注意:如果你的字段存在不规范存储(比如首尾带有多余分号,类似;Check;ACH;这种格式),可以先移除首尾分号再做计数,避免统计错误。SQL Server 2017及以上版本可以用如下简化写法:

SELECT
    Column_1,
    Column_2
FROM TableName
WHERE 
    LEN(TRIM(';' FROM Column_1)) - LEN(REPLACE(TRIM(';' FROM Column_1), ';', '')) IN (0, 2)

这里的IN (0,2)是等价简化写法,和拆分两个OR条件的判断逻辑完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 11:18:25