2013-02-16 58 views
16

開始學習SQL。有一個簡單的桌面遊戲與字段標題。我想根據標題進行搜索。如果我有一個名爲Age of Empires III: Dynasties的遊戲,並且我使用參數Age of Empires III: DynastiesLIKE,則一切正常,搜索將返回具有該名稱的記錄。但是,如果我有Age of Empires III搜索,它不返回任何記錄:SQL like search string以

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

這並不返回任何東西。我應該使用別的什麼而不是LIKE

我正在使用MySQL。

回答

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

上面的查詢不返回任何行,因爲你」重新尋找'帝國時代III'的確切字符串,它不存在於任何行中。

所以爲了配合該字符串不同的字符串,具有'age of empires'如子,你需要使用'%your string goes here%'

更多關於mysql string comparision

你需要嘗試這個

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

'%age of empires III%'這將在您的行中搜索任何匹配的子字符串,並將顯示在結果中。

+4

'LIKE'右側的字符串包含大寫字符,這是否與轉換爲小寫字符的字符串匹配? – 2014-08-13 11:08:14

+0

它取決於列/數據庫的排序規則。爲了安全起見,你可以使用 從遊戲中的SELECT *(更低(標題)更低)('%age of empires III%')); – 2014-11-10 09:51:50

2

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%'; 
16

您需要使用通配符

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

看起來這樣會更快,因爲它只是從一開始就搜索匹配。 – ChrisB 2016-12-16 01:10:29