查找first_name列不以A-Z开头的所有记录

时间:2013-02-22 18:10:34

标签: ruby-on-rails ruby-on-rails-3 postgresql rails-activerecord

我需要提取结果的子集,其中first_name列的值以标准英文字母(即A-Z)以外的任何内容开头,例如È。我正用这个敲打砖墙 - 例如,这就是我能够以字母A开头的所有记录:

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

任何帮助都会很棒。

编辑:我正在使用PostgreSQL数据库。

2 个答案:

答案 0 :(得分:5)

您可以使用~运算符来匹配正则表达式。 ~用于匹配case sensitive数据。因此,在您的情况下,first_name ~ '^[^A-Z]'users first_name的{​​{1}}不以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

答案 1 :(得分:0)

这应该适用于Postgresql

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

更多信息here