Поместите переменную в json_extract_path_text в запросе postgresql - PullRequest
0 голосов
/ 29 января 2020

У меня есть следующие select:

select json_extract_path_text(rules, 'amount', '5', 'percentage')
from promotion_rules

Пример из JSON выглядит следующим образом:

{
    "amount": {

        "1": {
            "percentage": 1
        },
        "2": {
            "percentage": 3
        },
        "3": {
            "percentage_below_eq": 5,
            "percentage_above": 10,
            "price": 20
        },
        "4": {
            "percentage_below_eq": 10,
            "percentage_above": 15,
            "price": 20
        }
    }
}

Я хочу использовать значения из других запросов / таблиц / cte внутри выше json_extract Функция вместо '5' (или достичь точного эффекта), как это можно сделать?

Вот часть кода и скрипка с полными данными, я не могу поместить все это здесь, потому что стек говорит мне, что мой пост я в основном код.

with percentages as (select pr.*, json_object_keys(rules->'amount')::INT as amount
from
promotion_rules pr
where id = 1
)
select
o.id as order_id,
json_extract_path_text(rules, 'amount', o.products_no, 'percentage') as percentage --it doesn't work this way, either with brackets
from orders o
join percentages p on p.amount = o.products_no

https://www.db-fiddle.com/f/oSQ3eW2G3kHgr3xvpHLw9Q/0

1 Ответ

1 голос
/ 29 января 2020

json_extract_path ожидает список text параметров.

Если вы хотите использовать столбец, который не является текстом, вам нужно привести его:

json_extract_path_text(rules, 'amount', <i><b>o.products_no::text</b></i>, 'percentage')
...