Postgresql jsonb выберите объект с разным порядком - PullRequest
0 голосов
/ 21 февраля 2020

В моей таблице есть один столбец с этим jsonb

{"parcelas": "[{"valor": "2136,45", "parcela": 75, "vencimento": "15/06/2019"}, {"valor": "2097,61", "parcela": 76, "vencimento": "15/07/2019"}, {"valor": "2058,33", "parcela": 77, "vencimento": "15/08/2019"}, {"valor": "2191,07", "parcela": 78, "vencimento": "15/09/2019"}]}"

Можно ли найти эту строку, когда я сравниваю равный объект, но без пробела или другого порядка? sample

SELECT * FROM myTable where myJsonBField ->> 'parcelas' = '[{"vencimento":"15/06/2019","valor":"2136,45","parcela":75},{"vencimento":"15/07/2019","valor":"2097,61","parcela":76},{"vencimento":"15/08/2019","valor":"2058,33","parcela":77},{"vencimento":"15/09/2019","valor":"2191,07","parcela":78}]'

- это тот же объект, но в другом порядке и с меньшим интервалом между itens.

tks

1 Ответ

0 голосов
/ 21 февраля 2020

Просто используйте ->, который дает jsonb вместо text и =.

SELECT *
       FROM mytable
       WHERE myjsonbfield->'parcelas' = '[{"vencimento":"15/06/2019","valor":"2136,45","parcela":75},{"vencimento":"15/07/2019","valor":"2097,61","parcela":76},{"vencimento":"15/08/2019","valor":"2058,33","parcela":77},{"vencimento":"15/09/2019","valor":"2191,07","parcela":78}]'::jsonb;
...