AdSense

網頁

2022/2/19

PostgreSQL JSON ->>操作符

PostgreSQL的->>操作符可用來篩選JSON型態(jsonjsonb)的資料,取得的結果為text。


例如employee資料表目前有以下資料,欄位contact的型態為jsonb

 id | name | age |                         contact                         |         created_at
----+------+-----+---------------------------------------------------------+----------------------------
  1 | john |  33 | {"name": "mary", "phone": ["0912345678", "0912345679"]} | 2022-02-15 21:33:43.578068
  2 | tony |  23 | {"name": "bill", "phone": ["0921345678", "0921345679"]} | 2022-02-19 14:53:17.520679

查詢contact欄位的資料時,可使用->>後接字串(key名稱)或整數(陣列索引)來篩選JSON資料的內容。

例如下面查詢JSON的key為name的值。

postgres=> SELECT contact ->> 'name' as contact_name FROM employee;
 contact_name
--------------
 "mary"
 "bill"

下面先用->篩選JSON的key為phone的JSON物件,然後以->>取得陣列索引為0的值。

postgres=> SELECT contact -> 'phone' ->> 0 as phone_1 FROM employee;
   phone_1
--------------
 "0912345678"
 "0921345678"

查詢時WHERE條件也可使用->>依JSON資料做篩選。

例如下面查詢contact JSON資料中key name值為bill的資料。

SELECT * FROM employee 
WHERE contact ->> 'name' = 'bill';

查詢結果。

postgres=> SELECT * FROM employee WHERE contact ->> 'name' = 'bill';
 id | name | age |                         contact                         |         created_at
----+------+-----+---------------------------------------------------------+----------------------------
  2 | tony |  23 | {"name": "bill", "phone": ["0921345678", "0921345679"]} | 2022-02-19 14:53:17.520679


沒有留言:

AdSense