Есть таблица в Postgres, как на картинке. Формат данных в before и after - JSON.
Необходимо сравнить данные из before и after внутри zone_limitation. Основная проблема заключается в том, что данные могут иметь разную сортировку, а при разной сортировке такие JSON-ячейки будут восприниматься, как разные, даже если будут иметь одинаковые цифры внутри.
Ответ
в postgresql есть операторы @> и <@ для jsonb
эти операторы проверяют структурного вхождение одного jsonb в другой (не взирая на последовательность ключей), т.о. если вам нужно проверить эквивалентность, то можно использовать комбинацию этих операторов, например:
with t as (
select
"id",
"before"#>'{"custom_targeting","include","zone_limitation"}' as "b",
"after"#>'{"custom_targeting","include","zone_limitation"}' as "a"
from "test"
)
select
t.id "id",
(t.a @> t.b and t.a <@ t.b)::boolean "Checker"
from t
order by 1
*данный ответ базируется на dbfiddle от 2SRTVF, см. оригинальный ответ: https://ru.stackoverflow.com/a/858064/265453
Комментариев нет:
Отправить комментарий