有关仅获取其中字段值仅包含rails中特定字符的一次出现的那些记录的问题

问题描述 投票:-2回答:2

我需要写一个rails active record where子句,我必须获取那些名称(name是我的表中的列)的行只包含一个字符'。'。

例如,如果表中有两行名称为“a.b”和“a.b.c”,那么我的查询应该只返回名称为“a.b”的行。

请帮我解决这个问题。

提前致谢!

ruby-on-rails postgresql ruby-on-rails-4 activerecord rails-activerecord
2个回答
3
投票

例如,您可以删除点并比较长度。

SELECT * FROM table WHERE (char_length(name) - char_length(replace(name, '.', '')))=1

但这不是很有效,因为索引无法使用。为了使事情更顺畅,您可以使用索引和查询在其自己的列中存储点数(深度?)。这可以在插入/更新触发器或应用程序层中完成,适合您的情况。

dbfiddle


1
投票

用正则表达式?你可以试试这个:

select * from "table" where "name" ~ '^[^\.]*\.[^\.]*$'
© www.soinside.com 2019 - 2024. All rights reserved.