Oracle SQL查询:筛选product_name不含_和<的产品信息
你的原查询问题在于,不同数据库对LIKE语法里的字符匹配规则不一样,而且下划线_本身是LIKE的通配符(匹配单个任意字符),需要特殊处理。下面分两种常用数据库给你正确写法:
MySQL/MariaDB 写法
MySQL不支持方括号的字符集合匹配,可通过两种方式实现需求:
- 用
NOT LIKE分别排除,注意转义下划线(用反斜杠\或指定ESCAPE字符):
SELECT * FROM product_information WHERE product_name NOT LIKE '%\_%' AND product_name NOT LIKE '%<%';
如果担心反斜杠转义有问题,也可以显式指定ESCAPE:
SELECT * FROM product_information WHERE product_name NOT LIKE '%!_%' ESCAPE '!' AND product_name NOT LIKE '%<%';
- 用正则表达式更简洁:
SELECT * FROM product_information WHERE product_name NOT REGEXP '[_<]';
SQL Server 写法
SQL Server支持方括号的字符集合匹配,你可以把要排除的字符都放在方括号里,或者分开写:
- 单条件匹配排除多个字符:
SELECT * FROM product_information WHERE product_name NOT LIKE '%[_<%]%';
- 分开条件更直观:
SELECT * FROM product_information WHERE product_name NOT LIKE '%[_]%' AND product_name NOT LIKE '%[<]%';
注意:原语句里的%[_[<]%写法错误,方括号内的_[<会被解析为字符_、[和<,而非你想要的_和<,所以无法正确排除目标字符。
内容的提问来源于stack exchange,提问作者Gerganchi
相关产品推荐
相关产品推荐

