我有这个 json 结构,我还存储了一个 PostgreSQL 类型名称
{
"temperature":{
"value":"(-75,-70]",
"type":"int4range"
}
}
我可以得到这样的值
SELECT '{"temperature":{"value":"(-75,-70]","type":"int4range"}}'::jsonb #> ARRAY['temperature','value']
现在值类型是文本,我知道我只能在 json 中存储简单类型,但我如何使用我拥有的类型名称动态地将值转换为 int4range
?
最佳答案
正如@Bread 所说,你不能动态转换数据。
但是你可以这样做:
WITH jsonb as (
SELECT '{"temperature":{"value":"[-75,-70]","type":"int4range"}}'::json
), fromjsonb as (
SELECT json->'temperature'->'value' as element,
json->'temperature'->'type' as type
FROM jsonb
), trim as (
SELECT trim(both '"' from element::text) as element,
trim(both '"' from type::text) as type
FROM fromjsonb
)
SELECT CASE WHEN type = 'int4range' THEN element::int4range
-- ELSE element::text
END
FROM trim;
case
-----------
[-75,-69)
(1 row)
在我的示例中,它选择了数据,但它无法工作,因为 PostgreSQL 不会让您选择第一行作为 int4range
,然后选择下一行作为另一种类型。
但是您可以使用相同的逻辑将数据插入到另一个表中(我假设这是您的目标)并且这会奏效。
关于json - 给定类型名称的类型转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42728703/