奇怪的查询结果

时间:2018-03-22 21:31:31

标签: sql phpmyadmin xampp

我有问题。我找到了像这样的查询:

SELECT name, surname FROM person WHERE name LIKE '[b-g]%'
SELECT name, surname FROM person WHERE name LIKE '[bcd]%'
SELECT name, surname FROM person WHERE name LIKE '[^b-g]%'

我自己试了一下:

select name from person where name like '%[^gkl]%'
select * from person where surname like '%[r-z]%'

我尝试用逗号分隔字符

select * from person where surname not like "%[n,j,e,a]%" and name not like "P%"

但我得到的只是空表或来自表人的所有记录,就像没有条件一样。我是通过来自XAMPP的phpmyadmin,将查询粘贴到控制台(也来自XAMPP)并且仍未得到任何预期。所以我很好奇,如果这实际上不起作用或我在查询中的某个地方犯了错误。感谢您提供任何有用的链接或解释“为什么它会像那样工作?”。如果有什么不清楚的话,我会在我起床后立即尝试修理它。 表格如下:

create table person (ID int not null auto_increment, surname varchar(100) 
collate utf8_general_ci, name varchar(100) collate utf8_general_ci, primary 
key(ID)) engine = innodb character set utf8 collate utf8_general_ci;

1 个答案:

答案 0 :(得分:1)

在标准SQL中,like的通配符正是:

  • %代表任意数量的字符
  • _代表一个字符

就是这样。根据您的问题,您可能认为SQL like支持字符范围和其他类似正则表达式的模式。但事实并非如此。

您可能感到困惑,因为SQL Server恰好支持字符范围。您没有使用SQL Server(由自动增量给出)。 MySQL具有正则表达式支持,因此您可以这样做:

WHERE name REGEXP '^[b-g]'

有许多资源可供学习网络上的正则表达式。