2011-08-27 54 views
6
SELECT * FROM dbname WHERE text = 'a%' 
(this can get all the `text` fields which begin with the letter "a".) 

但是如何得到第一個字母!= [a-z]的字段呢?php mysql查詢第一個字母!= [a-z]

例如:

\"hello\" // this first letter begin as \ not range in a-z 
いけ // also first letter not begin range in a-z 
... 
may also have a white space as the first character. 

所以你怎麼可以使用PHP MySQL查詢來獲取所有這些不同的結果。其中,第一個字母!=[a-z]

回答

8

試試這個:

SELECT * FROM dbname WHERE text REGEXP '^[^a-zA-Z]'; 

,如果你希望它是不區分大小寫(大寫或小寫)即到。如果你想允許大寫字母A-Z就用:

SELECT * FROM dbname WHERE text REGEXP '^[^a-z]'; 

本質上的正則表達式匹配說在沒有字母的字符串的開頭A-Z的任何字符串。

1
SELECT * FROM dbname WHERE text NOT REGEXP '^[a-z]'; 
1

非REGEXP解決方案是使用BETWEEN

SELECT * FROM dbname WHERE LEFT(text, 1) NOT BETWEEN 'a' AND 'Z'; 

這應該是比使用REGEXP更快,因爲MySQL能在查詢之間使用索引,但它不能在REGEXP查詢上。

但是,我沒有可用的基準測試,不應該難以測試。

+0

MySQL將不會在文本中使用索引,因爲您已將它包裝在函數中。你必須在where語句中的比較中隔離mysql的索引字段,以便在其上使用索引。 – Riedsio

+0

@Riedsio你是什麼意思? 'LEFT'可以利用指數。 – alexn

相關問題