Oracle中如何精准匹配列中指定字符串并返回整行
精准匹配分号分隔列中的单个值
你当前的LIKE (%963%)查询会命中所有包含"963"子串的行(比如值为963963963的行也会被返回),要精准匹配列中存在**单独的"963"**这个值的行,可以根据你使用的数据库选择以下方案:
MySQL/MariaDB
方法1:替换分隔符后用FIND_IN_SET
FIND_IN_SET默认支持逗号分隔的列表,先把分号替换成逗号再匹配:
SELECT * FROM table WHERE FIND_IN_SET('963', REPLACE(column, ';', ',')) > 0;
方法2:正则表达式匹配
直接用正则匹配"963"被分号包裹或处于首尾的情况:
SELECT * FROM table WHERE column REGEXP '(^|;)963(;|$)';
SQL Server
方法1:拆分字符串后匹配
用STRING_SPLIT拆分列值,再匹配目标值:
SELECT DISTINCT t.* FROM table t CROSS APPLY STRING_SPLIT(t.column, ';') s WHERE s.value = '963';
方法2:多条件LIKE匹配
覆盖值等于"963"、开头是"963;"、中间包含";963;"、结尾是";963"这四种情况:
SELECT * FROM table WHERE column = '963' OR column LIKE '963;%' OR column LIKE '%;963;%' OR column LIKE '%;963';
PostgreSQL
用STRING_TO_ARRAY把列值转成数组,再用ANY判断目标值是否存在:
SELECT * FROM table WHERE '963' = ANY(STRING_TO_ARRAY(column, ';'));
内容的提问来源于stack exchange,提问作者Kank Moiz
相关产品推荐
相关产品推荐

