2014-11-22 72 views
2

我有一個表結構如下圖所示(以虛擬數據代替真實的數據):MySQL的LIKE模式匹配返回空集時,它應該返回值

tableName 
+-----------+----------------+ 
| code  | description | 
+-----------+----------------+ 
| A   | text here  | 
| b   | blah blah  | 
| c   | sdfsdfsdfsdf | 
| d   | sdfsfkaljdaklj | 
| e   | asdkjasdlkjasd | 
| f   | adskljalkdj | 
| g   | asdjalkd  | 
| h   | askdjavsd  | 
+-----------+----------------+ 

我嘗試做以下命令:

SELECT * FROM tableName WHERE description LIKE '__[aeiou]%'; 

我希望這個select語句返回表中第三個字符是a,e,i,o或u的所有結果。

但是,我得到關於查詢0結果。我知道一個事實,即表中存在與此模式匹配的有效結果(第三個字符是a,e,i,o或u)。

我的查詢出了什麼問題?

+0

我不認爲mysql LIKE接受range [],因此它將它解釋爲以[開頭的文字字符串。 – Mihai 2014-11-22 02:36:10

+0

來自您的鏈接'MySQL提供的其他類型的模式匹配使用擴展的正則表達式。當你測試這種類型的模式的匹配時,使用REGEXP和NOT REGEXP運算符' – Mihai 2014-11-22 02:40:04

回答

3

使用正則表達式,而不是一個SQL Server風格LIKE模式:

SELECT * 
FROM tableName 
WHERE description REGEXP '^..[aeiou].*$'; 

編輯:

對於那些誰不仔細閱讀文檔,文檔說:

MySQL提供的其他類型的模式匹配使用擴展的 正則表達式。當您測試此類型的 模式的匹配項時,請使用REGEXP和NOT REGEXP運算符(或RLIKE和非RLIKE,它們是同義詞)。

下面的列表描述擴展正則表達式 的一些特點:

的功能列表,如[]在此列表中。 LIKE的標準只有兩個通配符,%_

+1

嗨,恐怕我不明白爲什麼'LIKE'在文檔中聲明支持該功能時不起作用? http://dev.mysql.com/doc/refman/5.0/en/pattern-matching.html – Prefix 2014-11-22 02:38:25

+1

@Prefix。 。 。請仔細閱讀文檔。支持的功能列表位於此句後面:「以下列表描述了擴展正則表達式的一些特徵:」 - 這些使用REGEX。 – 2014-11-22 02:39:49

+0

啊,說明它:)道歉,過了漫長的一天。 – Prefix 2014-11-22 02:40:14

1

在MySQL中,'_'字符不是擴展正則表達式類的一部分,因此不能這樣使用。使用RLIKE使用正則表達式