72

学习 SQL。有一个带有字段标题的简单桌面游戏。我想根据标题进行搜索。如果我有一个名为 的游戏Age of Empires III: Dynasties,并且我使用LIKEwith parameter Age of Empires III: Dynasties,一切正常,搜索返回具有该名称的记录。但如果我用 搜索Age of Empires III,它不会返回任何记录:

SELECT * from games WHERE (lower(title) LIKE 'age of empires III');

这不会返回任何东西。我应该使用其他东西代替LIKE吗?

我正在使用 MySQL。

4

6 回答 6

93
SELECT * from games WHERE (lower(title) LIKE 'age of empires III');

上面的查询没有返回任何行,因为您正在寻找任何行中都不存在的“帝国时代 III”确切的字符串。

因此,为了与具有不同字符串的字符串匹配,'age of empires'您需要使用该字符串作为子字符串'%your string goes here%'

更多关于mysql 字符串比较

你需要试试这个

SELECT * from games WHERE (lower(title) LIKE '%age of empires III%');

在 Like'%age of empires III%'中,它将在您的行中搜索任何匹配的子字符串,并将显示在结果中。

于 2013-02-16T07:52:57.063 回答
57

您需要使用通配符%

SELECT * from games WHERE (lower(title) LIKE 'age of empires III%');
于 2013-02-16T07:45:53.477 回答
11

除了使用%,age of empires III小写是age of empires iii这样你的查询应该是:

select *
from games
where lower(title) like 'age of empires iii%'
于 2019-03-29T07:34:21.347 回答
4

COLLATE UTF8_GENERAL_CI将作为忽略案例工作。利用:

SELECT * from games WHERE title COLLATE UTF8_GENERAL_CI LIKE 'age of empires III%';

或者

SELECT * from games WHERE LOWER(title) LIKE 'age of empires III%';
于 2013-02-16T07:45:21.913 回答
0

在 SQL 中,%---% 匹配介于两者之间的任何字符。 select * from table_name where column_name line '%kk%';将匹配任何包含 'ss' 的字符串,例如:

  • llsll
  • ssll 如果你想匹配字符串的开头,你应该使用'ss%'。 select * from table_name where column_name line 'ss%';此查询将仅返回 ssll。
于 2021-11-10T00:48:39.480 回答
0

如果您使用不带 % 的“like”运算符,则 like 将作为等号 (=) 工作,这意味着您的代码将如下所示:

select * from games where lower(title)= 'age of empires iii';

所以它没有找到任何匹配的数据,然后什么也没有返回。

但是,如果您只想将标题的一部分与您的参数进行比较,则应使用 % 符号。您可以在不同的位置使用它,这取决于数据库的逻辑。

一般用在参数的开头和结尾,代码如下:

select * from games where lower(title) like '%age of empires iii%';

即使开头或结尾或两者都有不匹配的字符,这也会搜索标题列中的值。它将搜索的重要条件是值作为参数发送给 like 运算符(在这种情况下,该值是“帝国时代 iii”)在标题字段的某处找到(在这种情况下,标题是“帝国时代 III : Dynasties"),并且此条件为真,因此将返回该行以及任何其他具有相同大小写的行。

于 2021-11-10T03:08:55.337 回答