Select 来自带有 WHERE 子句的 JSONB 字段
Select from JSONB field with WHERE clause
刚刚安装了 9.4 并尝试使用 JSONB 字段类型。
我用 jsonb 字段创建了一个 table 并且能够从中 select:
select statistics->'statistics'->'all_trades'->'all'->'all_trades_perc_profit' as profitable_perc FROM trade_statistics
工作正常。
现在我想根据字段值过滤结果:
select statistics->'statistics'->'all_trades'->'all'->'all_trades_perc_profit' as profitable_perc FROM trade_statistics WHERE profitable_perc > 1
//There is no "profitable_perc" column
无效。
如果我尝试将结果转换为双精度,也不起作用。
select cast(statistics->'statistics'->'all_trades'->'all'->'all_trades_perc_profit' as double precision) as profitable_perc FROM trade_statistics
//cant convert jsonb into double precision
如果是 jsonb,我应该如何在 WHERE 子句中使用 select 结果?
三处更正:
- 将查询包装在子查询中 - 您不能在
WHERE
子句 中引用 SELECT
列表别名
- 使用
->>
运算符获取文本形式的值
将文本值转换为整数,以便进行比较
SELECT *
FROM (
SELECT (statistics->'statistics'->'all_trades'->'all'->>'all_trades_perc_profit')::integer as profitable_perc
FROM trade_statistics
) sq1
WHERE profitable_perc > 1
刚刚安装了 9.4 并尝试使用 JSONB 字段类型。
我用 jsonb 字段创建了一个 table 并且能够从中 select:
select statistics->'statistics'->'all_trades'->'all'->'all_trades_perc_profit' as profitable_perc FROM trade_statistics
工作正常。
现在我想根据字段值过滤结果:
select statistics->'statistics'->'all_trades'->'all'->'all_trades_perc_profit' as profitable_perc FROM trade_statistics WHERE profitable_perc > 1
//There is no "profitable_perc" column
无效。
如果我尝试将结果转换为双精度,也不起作用。
select cast(statistics->'statistics'->'all_trades'->'all'->'all_trades_perc_profit' as double precision) as profitable_perc FROM trade_statistics
//cant convert jsonb into double precision
如果是 jsonb,我应该如何在 WHERE 子句中使用 select 结果?
三处更正:
- 将查询包装在子查询中 - 您不能在
WHERE
子句 中引用 - 使用
->>
运算符获取文本形式的值 将文本值转换为整数,以便进行比较
SELECT * FROM ( SELECT (statistics->'statistics'->'all_trades'->'all'->>'all_trades_perc_profit')::integer as profitable_perc FROM trade_statistics ) sq1 WHERE profitable_perc > 1
SELECT
列表别名