如何从 jsonb postgresql 获取按键值排序的所有键
How to get all keys ordered by key's value from jsonb postgresql
如何从 json 中获取所有键,按它自己的键的值排序
例如:key 是一个像 uuid 这样的数字,value 是日期
我已经这样做了,但没有订购:
CREATE TABLE IF NOT EXISTS products
(
id text UNIQUE NOT NULL
CONSTRAINT crm_id_pkey PRIMARY KEY,
materials jsonb
);
select
jsonb_object_keys(materials) as key,
from
products
WHERE
id = '5'
所以我需要键的结果 table,通过比较它们自己的日期(值)排序,例如:
select
jsonb_object_keys(materials) as key,
from
products
WHERE
id = '5'
ORDERED BY KEY.GETVALUE()
BUT ORDERED BY key.getValue() 函数在 postgres 中不存在,如果可能我该如何进行排序?
更新:
我发现另一个解决方案不是更好,但它也有效:
select jsonb_object_keys(materials) as keys,
materials -> jsonb_object_keys(materials) as date
from client_material
WHERE crm_id = '5'
order by date DESC;
示例数据:
insert into products values
('5', '{"k1": "2019-05-01", "k2": "2019-04-01"}');
在横向连接中使用 jsonb_object_keys(materials)
,这样您就可以在 order by
子句中使用结果键:
select key
from products
cross join jsonb_object_keys(materials) as key
where id = '5'
order by (materials->>key)::date;
key
-----
k2
k1
(2 rows)
如何从 json 中获取所有键,按它自己的键的值排序 例如:key 是一个像 uuid 这样的数字,value 是日期
我已经这样做了,但没有订购:
CREATE TABLE IF NOT EXISTS products
(
id text UNIQUE NOT NULL
CONSTRAINT crm_id_pkey PRIMARY KEY,
materials jsonb
);
select
jsonb_object_keys(materials) as key,
from
products
WHERE
id = '5'
所以我需要键的结果 table,通过比较它们自己的日期(值)排序,例如:
select
jsonb_object_keys(materials) as key,
from
products
WHERE
id = '5'
ORDERED BY KEY.GETVALUE()
BUT ORDERED BY key.getValue() 函数在 postgres 中不存在,如果可能我该如何进行排序?
更新: 我发现另一个解决方案不是更好,但它也有效:
select jsonb_object_keys(materials) as keys,
materials -> jsonb_object_keys(materials) as date
from client_material
WHERE crm_id = '5'
order by date DESC;
示例数据:
insert into products values
('5', '{"k1": "2019-05-01", "k2": "2019-04-01"}');
在横向连接中使用 jsonb_object_keys(materials)
,这样您就可以在 order by
子句中使用结果键:
select key
from products
cross join jsonb_object_keys(materials) as key
where id = '5'
order by (materials->>key)::date;
key
-----
k2
k1
(2 rows)