У меня есть столбец jsonb occurrences
, который содержит следующее
[{"occurs_on"=>"2019-02-04 23:00:00 UTC", "status"=>"none"},
{"occurs_on"=>"2019-02-05 23:00:00 UTC", "status"=>"none"}]
Я пытаюсь получить элемент, имеющий часть даты (строки datetime), равную 2019-02-04
поэтому я использую LIKE для этой цели
Event.where("events.occurrences ->> :key LIKE :value",
:key => 'occurs_on', :value => '2019-02-04%')
Это возвращает пустую коллекцию и я не уверен, почему он не может найти элемент
ОБНОВЛЕНИЕ
Я попробовал что-то подобное
sql = <<-HEREDOC
SELECT * FROM events WHERE ('{"status": "none"}' <@ ANY (ARRAY(select jsonb_array_elements(occurrences)))) LIMIT 1
HEREDOC
result = ActiveRecord::Base.connection.execute(sql)
, и это сработало, но если я изменил sql на
SELECT * FROM events WHERE ('occurrences->"occurs_on" LIKE "2019-02-04"' <@ ANY (ARRAY(select jsonb_array_elements(occurrences)))) LIMIT 1
, это вызовет ошибку!
У кого-нибудь есть идеи, как правильно использовать LIKE в этой ситуации?