我有问题。我找到了像这样的查询:
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;
答案 0 :(得分:1)
在标准SQL中,like
的通配符正是:
%
代表任意数量的字符_
代表一个字符就是这样。根据您的问题,您可能认为SQL like
支持字符范围和其他类似正则表达式的模式。但事实并非如此。
您可能感到困惑,因为SQL Server恰好支持字符范围。您没有使用SQL Server(由自动增量给出)。 MySQL具有正则表达式支持,因此您可以这样做:
WHERE name REGEXP '^[b-g]'
有许多资源可供学习网络上的正则表达式。