gpt4 book ai didi

ruby-on-rails - PostgreSQL LIKE 中的特殊字符

转载 作者:行者123 更新时间:2023-11-29 13:10:26 24 4
gpt4 key购买 nike

我的数据库中有通知表,其中包含数据类型为文本的元数据字段。下面是我的通知表的一条记录

#<Notification id: 1863, target_type: "User", target_id: 8, object_type: nil, object_id: nil, read: true, metadata: {:title=>"test user sent you a message. Read it now!", :description=>"Dear user, You've received a new chat from test user. Tap here to check!", :notification_type=>"chat", :sender_id=>7, :receiver_id=>8, :name=>"Shyam fb", :img_url=>"http://s3-eu-west-2.amazonaws.com/moodit-prod/avatars/images/000/000/001/original/image.jpg"}, created_at: "2019-03-27 13:01:48", updated_at: "2019-03-27 13:05:03">

一条记录的元数据值如下所示

metadata: {
:title=>"test user sent you a message. Read it now!",
:description=>"Dear user, You've received a new chat from test user. Tap here to check!",
:notification_type=>"chat",
:sender_id=>7,
:receiver_id=>8,
:name=>"Shyam fb",
:img_url=>"demo image url"
}

如果我这样做,我可以获得值(value) 7

User.find(8).notifications.last.metadata[:sender_id]

我想查找包含字符串 sender_id=>7 的元数据记录。

我尝试了以下查询但没有成功

User.find(8).notifications.where("metadata LIKE ? ", "%#{sanitize_sql_like(:sender_id=>7)}%" )

User.find(8).notifications.where("metadata LIKE ? ESCAPE'=' ", "%sender_id=>7".gsub('=', '!=').gsub('>', '!>') + '%')

User.find(8).notifications.where("metadata LIKE LOWER(E'sender_id=>7%')")

我如何使用 LIKE 查询实现这一点?

最佳答案

如果将来有人遇到此类问题,我设法进行了查询,他们可以使用以下查询从文本数据类型中查找记录。

User.find(8).notifications.where("position(':sender_id: ?' in metadata) != 0", 7)

关于ruby-on-rails - PostgreSQL LIKE 中的特殊字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55509148/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com