Postgresql 字符串截取


在一次數據遷移中,遇到的一個場景。需要從一串 JSON 中提取其中一段字符串。在 Bing 上搜索發現很少在 Postgresql 中用到字符串截取的。下面是解決的方法,不一定好,但恰好可以解決問題。

 

JSON 字符串

'{"item":{"id":"c0540d7e-bedb-4521-b2b1-401d099575d1","name":"這時一張圖片.jpg","path":"5cbf3cff-4be0-4f82-b21a-34ccbb93e830/15a8164e-6244-4369-96bd-3fa5f6a24ff9/823b93f69867ad18501057e4312793dc.jpg","createdUserId":"5cbf3cff-4be0-4f81-b21a-34ccbb93e830","hash":"823b93f69867ad18501057e43e2793dc","createdUserName":"Admin","type":".jpg","size":47505408,"createdAt":"2019-05-25T11:54:33.5207074+08:00","url":"http://221.178.13.191:9021/5cbf3cff-4be0-4f81-b21a-34ccbb93e830/15a8164e-6244-4369-96bd-4fa5f6a24ff9/823b93f69867ad18501057e43e2793dc.jpg","completed":false,"tag":null,"tags":["BIM_MANAGER","500103","MUNICIPAL","CONSTRUCTION_APPLY_PHASE"]},"success":true}'

 

原始信息如上,現在需要將粗體部分截取出來。用到時方法是 regexp_split_to_table,該方法可以將字符串分割成行。

第一次執行(其中第二個參數的 E 是 Postgresql 正則的語法)

SELECT regexp_split_to_table(JSON字符串, E',"path":"')

圖1

可以看到第二行中已經出現了我們需要的結果了。但是還不能直接使用。於是。。。再截一次。

第二次執行(得到最終結果)

SELECT regexp_split_to_table
(
	regexp_split_to_table
	(
		JSON字符串, E',"path":"'
	), 
	E'.jpg",'
) 
|| '.jpg' 
LIMIT 1 OFFSET 1;

圖2

說明:

1.第一層 regexp_split_to_table 得到兩條數據如圖1

2.第二層 regexp_split_to_table 從第一層的第二條結果中繼續截取,得到數據如圖2

3.圖2中第二條數據就離最終結果非常接近了,所以再給字符串后面加上.jpg

4.使用 LIMIT 1 OFFSET 1 語句獲取第二條數據,就是最終的結果數據如圖3

圖3

 

 


免責聲明!

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



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