学习SQL。有一个简单的桌面游戏与字段标题。我想根据标题进行搜索。如果我有一个名为Age of Empires III: Dynasties
的游戏,并且我使用带有参数LIKE
的{{1}},则一切正常,搜索会返回具有该名称的记录。但如果我使用Age of Empires III: Dynasties
进行搜索,则不会返回任何记录:
Age of Empires III
这不会返回任何内容。我应该使用其他内容而不是SELECT * from games WHERE (lower(title) LIKE 'age of empires III');
吗?
我正在使用MySQL。
答案 0 :(得分:45)
SELECT * from games WHERE (lower(title) LIKE 'age of empires III');
上述查询不会返回任何行,因为您正在寻找“帝国时代III”的精确字符串,这在任何行中都不存在。
因此,为了与具有'age of empires'
作为子字符串的不同字符串匹配此字符串,您需要使用'%your string goes here%'
你需要试试这个
SELECT * from games WHERE (lower(title) LIKE '%age of empires III%');
在Like '%age of empires III%'
中,这将搜索行中任何匹配的子字符串,并显示在结果中。
答案 1 :(得分:30)
您需要使用通配符%:
SELECT * from games WHERE (lower(title) LIKE 'age of empires III%');
答案 2 :(得分:3)
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%';
答案 3 :(得分:0)
除了使用%
之外,age of empires III
的小写字母是age of empires iii
,因此您的查询应该是:
select *
from games
where lower(title) like 'age of empires iii%'