【问题标题】:Find all records where first_name column does NOT start with A-Z查找 first_name 列不以 A-Z 开头的所有记录
【发布时间】:2013-02-22 18:10:33
【问题描述】:

我需要提取结果的子集,其中first_name 列的值以标准英文字母(即A-Z)以外的任何字符开头,例如È。我用这个把头撞在砖墙上 - 例如,这就是我能够获得所有以字母A开头的记录的方式:

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

任何帮助都会很棒。

编辑:我使用的是 PostgreSQL 数据库。

【问题讨论】:

  • 您能提供您的数据库系统名称吗? MySQL? PostGreSQL?

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


【解决方案1】:

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

【讨论】:

  • 谢谢,效果很好,我感冒了,很抱歉我花了这么长时间才得到这个回复,它真的帮了我很大的忙。
【解决方案2】:

这应该在 Postgresql 中工作

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

更多信息here

【讨论】:

    猜你喜欢
    • 2016-08-26
    • 2019-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-23
    • 1970-01-01
    • 2011-08-02
    相关资源
    最近更新 更多