Страницы

Поиск по вопросам

пятница, 7 июня 2019 г.

Сортировка внутри JSON (sql, Postgres)


Есть таблица в 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

Комментариев нет:

Отправить комментарий