【问题标题】:Strange query results奇怪的查询结果
【发布时间】:2018-09-01 11:46:40
【问题描述】:

我有问题。我在某处发现了这样的查询:

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;

【问题讨论】:

标签: sql phpmyadmin xampp


【解决方案1】:

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

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

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

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

WHERE name REGEXP '^[b-g]'

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

【讨论】:

    猜你喜欢
    • 2013-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-11
    • 2017-02-26
    • 2023-04-02
    相关资源
    最近更新 更多