Специальный символ в LIKE в PostgreSQL - PullRequest
1 голос
/ 04 апреля 2019

В моей базе данных есть таблица уведомлений, которая содержит поле метаданных с типом данных TEXT. Ниже приведена одна запись для моей таблицы уведомлений

#<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"
          }

Я могу получить значение 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?

1 Ответ

1 голос
/ 09 апреля 2019

Мне удалось сделать запрос, если в будущем у кого-то возникнет такая проблема, он может использовать приведенный ниже запрос для поиска записи по текстовому типу данных.

User.find(8).notifications.where("position(':sender_id: ?' in metadata) != 0", 7)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...