2016-03-19 11 views
1

Bu bir süredir beni rahatsız ediyor ... Kullanıcı tablosunu sorgulamam ve adında çift boşluk olanları bulmam gerekiyor.MySQL REGEXP Rails ActiveRecord kullanarak

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

VEYA

:

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

Ben de yakut Regex kullanarak raylar çalışmak yapabilirsiniz: Ben, en basit ve daha özlü bir varlık db karşı doğrudan çalışmak SQL sorguları birden çok sürümü

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

AR'yi çeşitli şekillerde kullanmaya çalışıyorum ama ne eksik olduğumu bilmiyorum. Belki bir şeyler kaçmak gerek ... Birkaç kez okuyun: http://dev.mysql.com/doc/refman/5.0/en/regexp.html

sorunun kaynağının regex ama değil

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

Bence en basit olanı: 'SELECT' ilk son 'LIKE'%% ''. –

+0

Ne yazık ki işe yaramıyor .... [17] pry (main)> User.where ("'full_name' LIKE?", '%%'). => 0 – superuseroi

cevap

2

çalışmıyor Sadece neden görmüyorum sütun adın. literal dizgi 'full_name' iki boşluk varsa MySQL soruyorsunuz. Bu değiştirme: Buna

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

:

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

Benim en düşünüyorum yaptıktan sonra/tüm denemelerinizi çalışacaktır.

+0

Ohh wow Bunu tamamen özledim !!! Teşekkürler – superuseroi

+0

Hepimiz olur. . . Sorun iki inç yana olduğunda beynimizi mükemmel bir şekilde kodlamak. :-) –

İlgili konular