2010-03-19 85 views
4

我必須創建一個SQL查詢來獲取以特定字符開頭的所有行,除非傳遞給(PHP)函數的參數爲​​0,那麼它應該獲得每個那行不是以A - Z開頭(如#0-9。,$ etc)。MySQL:檢查是否第一個字符是_not_ AZ

什麼是最簡單和最快的方式來獲得這些行?

DB:MySQL 5.1中
柱:標題

回答

7
SELECT * 
FROM mytable 
WHERE title NOT RLIKE '^[A-Z]' 
3
SELECT * 
FROM myTable 
WHERE theColumn RLIKE '^[^A-Z]' 

說明
隨着RLIKE謂詞,一個括號圖案表示括號內列出的任何一個字符(允許使用指示範圍的短劃線,如這裏AZ是「A到Z」)。
注意兩個^字符;他們有一個非常明顯的含義:
第一個代表「字符串的開始」
其他字符^,中括號表示該模式應匹配是在括號內的列表其後列出的任何字符。
有關更多詳細信息,請參閱mySQL documentation on pattern matching

的也可以被替換地表示爲跟隨

... 
WHERE theColumn NOT RLIKE '^[A-Z]' 

謹慎的字:獨立於括號語法,以上二者中示出的圖案使用「前端通配符」,它只能被處理通過表/索引掃描(或至少部分掃描),並且這對於更大的表格可能相對低效。

+1

在正則表達式中,'%'不是通配符 – Quassnoi 2010-03-19 14:15:47

+0

@Quassnoi:良好的捕獲。我混合LIKE和RLIKE語法......現在全部修復。 – mjv 2010-03-19 14:41:04

相關問題