簡體   English   中英

JSON 數據庫表查詢

[英]JSON database table query

我有帶有一些對象的 JSON 表,我正在嘗試查詢 object 中的金額值

{
"authorizations": [
{
  "id": "d50",
  "type": "passed",
  "amount": 100,
  "fortId": 5050,
  "status": "GENERATED",
  "voided": false,
  "cardNumber": 3973,
  "expireDate": null,
  "description": "Success",
  "customerCode": "858585",
  "paymentMethod": "cash",
  "changeDatetime": null,
  "createDatetime": 000000000,
  "reservationCode": "202020DD",
  "authorizationCode": "D8787"
},
{
  "id": "d50",
  "type": "passed",
  "amount": 100,
  "fortId": 5050,
  "status": "GENERATED",
  "voided": false,
  "cardNumber": 3973,
  "expireDate": null,
  "description": "Success",
  "customerCode": "858585",
  "paymentMethod": "cash",
  "changeDatetime": null,
  "createDatetime": 000000000,
  "reservationCode": "202020DD",
  "authorizationCode": "D8787"
 }
 ],
 }

我嘗試了以下四個選項,但這些選項都沒有給出 object 的值:

SELECT info @> 'authorizations:[{amount}]'
FROM idv.reservations;

SELECT info -> 'authorizations:[{amount}]'
FROM idv.reservations;

info -> ''authorizations' ->> 'amount'
FROM idv.reservations

select (json_array_elements(info->'authorizations')->'amount')::int from idv.reservations

注意我正在使用 DBeaver

如果您希望每個 object 包含在“授權”JSON 數組中的一行,並具有相應的數量,您可以使用橫向連接和jsonb_array_elements()

select r.*, (x.obj ->> 'amount')::int as amount
from reservations r
cross join lateral jsonb_array_elements(r.info -> 'authorizations') x(obj)

我們還可以一次提取所有金額並將它們放入一個數組中,如下所示:

select r.*, 
    jsonb_path_query_array(r.info, '$.authorizations[*].amount') as amounts
from reservations r

DB Fiddlde 上的演示

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM