van*_*nov 2 postgresql json jsonb
我有JSONB列,其数据如下:
{"plays": {"win": 90, "draw": 8, "lose": 2}}
Run Code Online (Sandbox Code Playgroud)
如何使用win和draw键计算总和?
就像是:
SELECT
data::json#>>'{plays,draw}' + data::json#>>'{plays,win}' as "total_plays",
FROM
plays_data;
Run Code Online (Sandbox Code Playgroud)
假设您的表和数据为以下内容(请注意json,为了避免在列名和类型之间造成混淆,我避免了调用任何列;这是推荐的做法):
CREATE TABLE data
(
some_data json
) ;
INSERT INTO data
(some_data)
VALUES
('{"plays": {"win": 90, "draw": 8, "lose": 2}}') ;
Run Code Online (Sandbox Code Playgroud)
您需要使用以下查询:
SELECT
CAST(some_data->'plays'->>'win' AS INTEGER) + CAST(some_data->'plays'->>'draw' AS INTEGER) AS total_plays
FROM
data ;
Run Code Online (Sandbox Code Playgroud)
| total_plays | | ----------:| | 98 |
说明:
->应用于左侧的JSON列(JSON对象)和右侧的字符串的运算符,将对应的字段作为JSON对象(可以是对象,数组或值)返回。
->>经营者给回场值作为text。PostgreSQL无法知道您的数据是字符串,数字还是布尔值。它将所有内容都视为字符串,这就是它们的存储方式。
CAST(expression AS type)将表达式转换为指定的类型。JavaScript可以使用数字或字符串,然后根据需要将其从一个转换为另一个。在大多数情况下,必须明确告知PostgreSQL是否需要将某些表达式解释为一个表达式。至于数字,JavaScript不允许您在浮点数或整数之间进行指定。PostgreSQL需要具体说明。
您可以在检查一切dbfiddle 这里
参考:
| 归档时间: |
|
| 查看次数: |
424 次 |
| 最近记录: |