Oracle数据库中如何查找包含指定逗号分隔数值组合的行数据
错误原因
你原有写法中的正则表达式包含无意义的右方括号,且没有做边界匹配,会出现两种问题:一是匹配不到符合要求的目标值,二是可能误匹配到包含153,54、53,542这类前缀/后缀多余数字的内容。
正确实现方案
方案1:REGEXP_LIKE 正则匹配(适配Oracle、MySQL 8.0+、PostgreSQL等支持该函数的数据库)
-- 需求1:查找包含 53,54 的行 WHERE REGEXP_LIKE(DIST_GRP, '(^|,)53,54(,|$)') -- 需求2:查找包含 50,52,53 的行 WHERE REGEXP_LIKE(DIST_GRP, '(^|,)50,52,53(,|$)')
正则逻辑说明:
(^|,)匹配字符串开头或逗号,确保目标数字串的前半段没有其他多余数字- 中间为你需要匹配的连续数字序列
(,|$)匹配逗号或字符串结尾,确保目标数字串的后半段没有其他多余数字
方案2:LIKE 写法(适配所有支持字符串拼接的数据库,兼容性更好)
通过给原字段前后拼接逗号,消除边界匹配问题:
-- 需求1:查找包含 53,54 的行 WHERE CONCAT(',', DIST_GRP, ',') LIKE '%,53,54,%' -- 需求2:查找包含 50,52,53 的行 WHERE CONCAT(',', DIST_GRP, ',') LIKE '%,50,52,53,%'
内容的提问来源于stack exchange,提问作者user10823899
相关产品推荐
相关产品推荐

