如何在SQL中排除含指定双词的行?含Uber与Uber Eats场景
两类SQL查询的正确写法
一、筛选包含uber但排除所有uber eats相关内容的行
你的原条件没覆盖到uber和eats之间存在空格、特殊字符的情况,需要用正则表达式匹配任意分隔符。以下是主流数据库的写法:
MySQL/MariaDB
WHERE LOWER(name) LIKE '%uber%' AND LOWER(name) NOT REGEXP 'uber\\W+eats'
\\W+匹配任意非单词字符(空格、星号、标点等)一次或多次,确保排除所有uber与eats中间有分隔的情况。
PostgreSQL
WHERE LOWER(name) LIKE '%uber%' AND LOWER(name) !~ 'uber\W+eats'
SQL Server
WHERE LOWER(name) LIKE '%uber%' AND NOT REGEXP_LIKE(LOWER(name), 'uber\W+eats')
若你的SQL Server版本不支持REGEXP_LIKE,可使用LIKE通配符组合(覆盖范围有限):
WHERE LOWER(name) LIKE '%uber%' AND NOT (LOWER(name) LIKE '%uber%eats%')
二、单独筛选仅含uber eats相关内容的行
用正则匹配uber与eats之间的任意分隔符:
MySQL/MariaDB
WHERE LOWER(name) REGEXP 'uber\\W+eats'
PostgreSQL
WHERE LOWER(name) ~ 'uber\W+eats'
SQL Server
WHERE REGEXP_LIKE(LOWER(name), 'uber\W+eats')
如果需要避免类似“xubereatsy”这类误匹配,可添加单词边界控制,比如\\buber\\W+eats\\b,根据实际需求调整即可。
内容的提问来源于stack exchange,提问作者mah65
相关产品推荐
相关产品推荐

