查询TB_PETS表指定字符条件无结果,SQL LIKE语句问题排查
问题排查方案
1. 数据库语法兼容性问题
你写的_[aui]%是SQL Server等支持T-SQL语法的数据库的字符集匹配写法,但MySQL、PostgreSQL这类数据库并不支持[]作为通配符。如果用的是这类数据库,得换写法:
- MySQL/PostgreSQL可用正则匹配:
SELECT * FROM TB_PETS WHERE PETNAME REGEXP '^.[aui]';
- 或者用
LIKE结合多条件OR兼容所有数据库:
SELECT * FROM TB_PETS WHERE PETNAME LIKE '_a%' OR PETNAME LIKE '_u%' OR PETNAME LIKE '_i%';
2. 大小写敏感问题
如果数据库开启了大小写敏感(比如MySQL用区分大小写的排序规则、PostgreSQL默认设置),而表中宠物名称的第二个字符是大写A/U/I,那么_[aui]%只会匹配小写情况。可以改成大小写不敏感的写法:
- 针对支持
[]的数据库:
SELECT * FROM TB_PETS WHERE LOWER(PETNAME) LIKE '_[aui]%';
- 用正则不敏感模式(以MySQL为例):
SELECT * FROM TB_PETS WHERE PETNAME REGEXP '^.[aui]' COLLATE utf8_general_ci;
3. 数据本身无符合条件的记录
先确认表中确实存在目标数据:
- 先列出所有宠物名称手动检查:
SELECT PETNAME FROM TB_PETS;
- 或者单独验证第二个字符为A的情况:
SELECT * FROM TB_PETS WHERE PETNAME LIKE '_A%' OR PETNAME LIKE '_a%';
如果这个查询也返回空,说明表中本身没有符合条件的记录。
内容的提问来源于stack exchange,提问作者ouie raphael
相关产品推荐
相关产品推荐

