postgresql數組操作


1. 遇到一個麻煩的事情,展示詳情的時候,有個字段是varchar類型,但是存儲的是數組字符串。

類似‘["09","03","11","05","04","01"]’。

需要通過查詢字符串的數據,獲得相應的中文展示。

如: '['九','三','十一','五','四','一']'

 

2. 查詢postgresql文檔后,找到一個非常方便的方法,可以將字符串數組切換成table

select * from json_array_elements_text('["09","03","11","05","04","01"]'::json)

  

 
3. 可是換到服務器上發現,服務器數據庫版本過低不支持json_array_elements_text方法

 

4. 怎么辦,想到了升級數據庫,這個方法不行,畢竟是在服務器。又想到添加json_array_elements_text方法到現有數據庫,

   雖然找到文檔,但是操作起來非常麻煩。后來查到一篇文章,可以將數據轉換成逗號分割的字符串

SELECT
	string_agg(TRIM(elem :: TEXT, '"'), ',')
FROM
	json_array_elements(
		'["09","03","11","05","04","01"]' :: json
	) AS elem

  執行后的結果: 09,03,11,05,04,01

 

5. 😄,好熟悉的格式,這個結果可以通過函數操作轉換成table

SELECT
regexp_split_to_table(
	(
		SELECT
			string_agg(TRIM(elem :: TEXT, '"'), ',')
		FROM
			json_array_elements('["09","03","11","05","04","01"]'::json) AS elem
	),
	E'\,'
);

  輸出結果:

 

6. 於是乎一切迎刃而解。

最終sql代碼:

SELECT
	"service"."province_id",
	(
		SELECT
			ARRAY_AGG(province)
		FROM
			test_province
		WHERE
			province_id IN(
				SELECT
					regexp_split_to_table(
						(
							SELECT
								string_agg(TRIM(elem :: TEXT, '"'), ',')
							FROM
								json_array_elements("service"."province_id" :: json) AS elem
						),
						E'\,'
					)
			)
	) AS "province_name"
FROM
	"test_service" AS "service"
WHERE
	"service"."service_id" = 'test';

  結果:

 

參考: https://dba.stackexchange.com/questions/54283/how-to-turn-json-array-into-postgres-array 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM