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

相关问题