2016-03-19 17 views
1

これはしばらく私を悩ませています...私はユーザーのテーブルを照会し、名前に二重スペースを持つものを見つける必要があります。Rails ActiveRecordを使用したMySQL REGEXP

User.pluck(:full_name).select {|n| n =~ /([[:alpha:]]*)[[:space:]]{2}/ } 

OR

SELECT 'first last' REGEXP '[[:space:]]{2}'; 

は、私もそれがルビーREGEXを使用して、レールから動作させることができます。 私は、最も簡単かつより簡潔ビーイングDBに対して直接動作するSQLクエリの複数のバージョンを持っています

User.pluck(:full_name).select {|n| n =~ /\w+\s{2}/ } 

私はいくつかの点でARを使用しようとしていましたが、私は何が欠けているのか分かりません。たぶん私は何かをエスケープする必要があります... 私は数回をお読みください。 http://dev.mysql.com/doc/refman/5.0/en/regexp.html

それは問題があなたの正規表現ではなくではありません

2] pry(main)> User.where("'full_name' REGEXP ?", "[[:alpha:]]*[[:space:]]{2}").count 
=> 0 
[3] pry(main)> User.where("'full_name' REGEXP ?", '[[:alpha:]]*[[:space:]]{2}').count 
=> 0 
[4] pry(main)> User.where("'full_name' REGEXP ?", '[[:alpha:]]*[[:space:]]{2}').to_sql 
=> "SELECT `users`.* FROM `users` WHERE ('full_name' REGEXP '[[:alpha:]]*[[:space:]]{2}')" 
[5] pry(main)> User.where("'full_name' REGEXP ?", '[[:space:]]{2}') 
=> [] 
[6] pry(main)> User.where("'full_name' REGEXP ?", '[[:blank:]]{2}') 
=> [] 
[7] pry(main)> User.where("'full_name' RLIKE ?", '[[:blank:]]{2}') 
=> [] 
[8] pry(main)> User.where("'full_name' RLIKE ?", '[[:blank:]]{2}').to_sql 
=> "SELECT `users`.* FROM `users` WHERE ('full_name' RLIKE '[[:blank:]]{2}')" 
[9] pry(main)> User.where("'full_name' RLIKE ?", '[[:blank:]]').count 
=> 0 
[10] pry(main)> User.where("'full_name' RLIKE ?", '[[:space:]]').count 
=> 0 
[11] pry(main)> User.where("'full_name' RLIKE ?", '.*[[:space:]].*').count 
=> 0 
[12] pry(main)> User.where("'full_name' RLIKE ?", '\[[:space:]\]').count 
=> 0 
+0

私は最も簡単だと思います: 'SELECT 'first last' LIKE '%%''。 –

+0

残念ながらそれは動作しません.... [17] pry(main)> User.where( "'full_name' LIKE? '、' %% ')。count => 0 – superuseroi

答えて

2

機能しない理由を私は見ていませんあなたの列名。 リテラル文字列 'full_name'に2つのスペースがあるかどうかをMySQLに問い合わせています。あなたは私はあなたの試みのほとんど/すべてがうまくいくと思うことを実行した後

User.where("full_name REGEXP ?", '[[:space:]]{2}') 

:これまで

User.where("'full_name' REGEXP ?", '[[:space:]]{2}') 

:これを変更します。

+0

Ohh wow !!!ありがとうございます – superuseroi

+0

私たちすべてに起こります。 。 。問題が2インチのところにあるとき、私たちの頭脳を完全に良いコードに羅列する。 :-) –

関連する問題