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

SQL Server单列多Generic_Code值的精准与模糊查询需求

在SQL Server中处理FAMPRD表逗号分隔Generic_Code列的两类查询

示例测试数据

假设FAMPRD表的Generic_Code列(varchar类型)有以下测试记录:

Generic_Code
'00001'
'00001','00002'
'00001','00002','00034'
'00002','00052'
'00034','00052'

1. 精准匹配查询:仅返回仅包含'00001'和'00002'的记录

需求:仅保留Generic_Code恰好包含'00001'和'00002'(无其他代码,顺序不影响)的记录。

方案1:字符串匹配(兼容所有SQL Server版本)

SELECT *
FROM FAMPRD
WHERE 
    -- 确保同时包含两个目标代码
    Generic_Code LIKE '%''00001''%'
    AND Generic_Code LIKE '%''00002''%'
    -- 排除包含其他5位数字代码的情况
    AND Generic_Code NOT LIKE '%''000[0-9][0-9]''%' ESCAPE '\'
    -- 验证总长度符合仅两个代码的情况(去掉引号和逗号后长度为10)
    AND LEN(REPLACE(REPLACE(Generic_Code, '''', ''), ',', '')) = 10

方案2:使用STRING_SPLIT(SQL Server 2016及以上版本)

这种方式更严谨,避免字符串匹配的边界问题:

SELECT f.*
FROM FAMPRD f
CROSS APPLY STRING_SPLIT(REPLACE(f.Generic_Code, '''', ''), ',') s
GROUP BY f.Generic_Code, f.列1, f.列2 -- 替换为表中实际存在的所有列
HAVING 
    COUNT(DISTINCT s.value) = 2
    AND MAX(CASE WHEN s.value = '00001' THEN 1 ELSE 0 END) = 1
    AND MAX(CASE WHEN s.value = '00002' THEN 1 ELSE 0 END) = 1

预期结果

Generic_Code
'00001','00002'

2. 模糊匹配查询:返回包含'00001'或'00002'的所有记录

需求:只要Generic_Code中存在'00001'或'00002',无论是否包含其他代码,都返回。

SQL查询代码

SELECT *
FROM FAMPRD
WHERE 
    Generic_Code LIKE '%''00001''%'
    OR Generic_Code LIKE '%''00002''%'

预期结果

Generic_Code
'00001'
'00001','00002'
'00001','00002','00034'
'00002','00052'

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 12:10:26