0

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

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

任何帮助都会很棒。

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

4

2 回答 2

5

您可以使用~运算符来匹配正则表达式。~用于匹配case sensitive数据。因此,在您的情况下,first_name ~ '^[^A-Z]'将给出who不以. 要匹配,您需要使用.usersfirst_nameA-Zcase insensitive~*

  @results = User.where("first_name ~ ?", "^[^A-Z]").order("first_name ASC")

或者

您还可以使用!~which 给出不匹配的结果(即)first_name !~ ^[A-Z]等同于first_name ~ ^[^A-Z]. 为了匹配case insensitive使用!~*

  @results = User.where("first_name !~ ?", "^[A-Z]").order("first_name ASC")

有关更多信息,请参阅文档

于 2013-02-22T18:21:30.817 回答
0

这应该在 Postgresql 中工作

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

更多信息在这里

于 2013-02-22T18:28:52.497 回答