首页 > 解决方案 > 使用字符串结尾字符 (/z) 的 AR 查询中的正则表达式返回空的 AR 关系;使用行尾 ($) [PG] 返回预期结果

问题描述

注意:以下使用 PG 数据库。

我已经设置了模型 Foo 属于模型 Bar。在尝试返回 bar.name 以“abc”结尾(例如“def abc”但不是“def abc-2”)的所有条目 Foo 时,我编写了查询:

Foo.joins(:bar).where('bar.name ~* ?', "abc\z")

此查询不返回任何结果。但是,此查询:

Foo.joins(:bar).where('bar.name ~* ?', "abc$")

返回我预期的结果。

再深入一点,我测试了相同的查询,但省略了“abc”(即仅查询正则表达式锚点)。对于我当前的数据库,“\z”查询返回 94 个结果,而“$”查询返回 2,016 个结果。

我想了解(a)我的查询是否存在根本性错误,以及(b)导致这种行为的幕后情况。似乎数据库正在像一堆块状的多行字符串一样被查询,而不是每个条目字段都被视为自己的字符串,但我不知道为什么,或者即使是这样。

标签: ruby-on-railsregexpostgresqlactiverecord

解决方案


推荐阅读