0

我需要提取first_name列的值以非標準英文字母(即A-Z)開頭的結果子集,例如È。我敲我的頭撞牆本 - 例如,這是怎麼了,我已經能夠得到以字母A的所有記錄:查找first_name列未以A-Z開頭的所有記錄

@results = User.where("first_name LIKE ?", "A%").order("first_name ASC") 

任何幫助將是美好的。

編輯:我正在使用PostgreSQL數據庫。

+2

你能提供你的數據庫系統名嗎? MySQL的? PostgreSQL的? – MrYoshiji 2013-02-22 18:12:39

+0

對不起PostGreSQL – 2013-02-22 18:13:07

回答

5

您可以使用~運算符來匹配正則表達式。 ~用於匹配case sensitive數據。所以在你的情況下,first_name ~ '^[^A-Z]'將給users其0123¾不以A-Z開頭。要匹配case insensitive,您需要使用~*

@results = User.where("first_name ~ ?", "^[^A-Z]").order("first_name ASC") 

也可以使用!~其給出不匹配的結果(即)first_name !~ ^[A-Z]相當於first_name ~ ^[^A-Z]。匹配case insensitive使用!~*

@results = User.where("first_name !~ ?", "^[A-Z]").order("first_name ASC") 

欲瞭解更多信息,請參閱documentation

+0

謝謝你,這工作完美,我一直對流感感到抱歉,它花了我很長時間纔得到這個答覆,它真的幫了我。 – 2013-03-01 11:04:13

0

這應該在PostgreSQL

@results = User.where("first_name SIMILAR TO ?", "[A-Z]%"工作)

更多信息here

相關問題