You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用LIKE通配符查询person表返回空结果的问题求助

解决LIKE语句带方括号查询返回空结果的问题

首先得明确一个关键知识点:你用的[b-g]、[^gkl]这种方括号语法,是SQL Server(以及微软Access等少数数据库)专属的LIKE通配符规则,用来匹配单个字符属于指定范围/集合,或者排除某个范围/集合。如果你的数据库是MySQL、PostgreSQL、SQLite这类主流数据库,它们根本不支持这个语法,自然会返回空结果——这是最可能的原因。

下面针对你的查询,分两种情况给出正确写法:

情况1:你用的是SQL Server(或支持方括号语法的数据库)

如果是这种情况,先检查你的查询写法有没有小问题,再核对数据是否符合条件:

  • 你的select * from person where surname not like "%[n,j,e,a]%"里,方括号里不需要加逗号,正确写法是surname not like '%[njea]%'——逗号会被当成普通字符匹配,而你的数据里大概率没有带逗号的surname,这会导致这个条件无法正确过滤目标字符;结合name not like 'P%',可能你的数据里所有记录要么name是P开头,要么surname包含n/j/e/a,所以返回空。
  • 另外两个查询select name from person where name like '%[^gkl]%'、select * from person where surname like '%[r-z]%'写法本身是对的,但要确认你的person表中确实存在符合条件的记录:比如有没有name里包含非g/k/l字符的?有没有surname里包含r到z之间字母的?如果数据本身没有,那返回空是正常的。

情况2:你用的是MySQL、PostgreSQL等不支持方括号的数据库

这类数据库需要用正则表达式来实现相同逻辑,替换成对应的正则函数:

  • 原查询select name from person where name like '%[^gkl]%'(匹配name包含非g/k/l的字符),改成正则写法:
    -- MySQL
    select name from person where name regexp '[^gkl]';
    -- PostgreSQL
    select name from person where name ~ '[^gkl]';
    
  • 原查询select * from person where surname like '%[r-z]%'(匹配surname包含r-z之间的字符),改成:
    -- MySQL
    select * from person where surname regexp '[r-z]';
    -- PostgreSQL
    select * from person where surname ~ '[r-z]';
    
  • 原查询select * from person where surname not like "%[n,j,e,a]%" and name not like "P%",改成:
    -- MySQL
    select * from person where surname not regexp '[njea]' and name not like 'P%';
    -- PostgreSQL
    select * from person where surname !~ '[njea]' and name not like 'P%';
    

总结一下:先确认你的数据库类型,再对应调整查询语法,最后检查数据是否真的存在符合条件的记录,就能解决返回空结果的问题啦。

内容的提问来源于stack exchange,提问作者Daniel1490

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 12:32:58