2011-11-09 55 views
36
SELECT stuff REGEXP 'itunes' as is_itunes; 

在這個MySQL查詢中,如果「stuff」中包含「itunes」這個詞,它會將其標記爲itunes。如何查詢包含MySQL中給定文本的字段?

但是,我想說「開始」。我怎樣才能檢查「開始」而不是文本中的任何地方?

回答

73
SELECT ... WHERE stuff LIKE 'itunes%'; 

這裏%作爲通配符,所以這將匹配與stuff場等於行任何的itunesitunesfooitunes1 ...

更多信息:SQL LIKE OperatorW3Schools的

+4

如果取代'itunes'使用佔位符?這是正確的'SELECT ... WHERE stuff stuff like''%';' – user2118559

+2

%符號傳達了什麼? – Skynet

+3

@Skynet,%是一個匹配任意數量字符(包括零個字符)的通配符。所以這個例子會匹配itunesstore,itunesUsername和itunes。 MySQL文檔在這裏,很難搜索谷歌的%! https://dev.mysql.com/doc/refman/5.7/en/pattern-matching.html – georgiecasey

7

添加插入符號符號,它代表該字符串的開頭:

SELECT stuff REGEXP '^itunes' as is_itunes; 

但是,LIKE 'itunes%'由馬克認爲應該是快了很多,特別是如果你的索引的設置是否正確。

4

對於一個索引的字段是更好的事:

select ... where stuff >='itunes' AND stuff < 'itunet'

這不會創建一個全表掃描,並使用索引。

+0

這似乎是一種已知的字符串前綴的方式。任何人都可以評論表現,尤其是一張大桌子嗎? – aaronbauman

+0

這看起來像是一個遺留在mysql v3.23天的遺蹟,當時它只有myisam –

2
SELECT ... WHERE LEFT(stuff, 6) = 'itunes'; 
0
SELECT ... WHERE stuff REGEXP '[[:<:]]itunes'; 
+0

另一個沒有任何解釋的anser。 –

+0

儘管此鏈接可能回答問題,但最好在此處包含答案的基本部分,並提供供參考的鏈接。如果鏈接頁面更改,則僅鏈接答案可能會失效。 - [來自評論](/ review/low-quality-posts/18145859) – fredrik

相關問題