PostgreSQL字符切割:substring函數的用法說明
作為當前最強大的開源數據庫,Postgresql(以下簡稱pg)對字符的處理也是最為強大的,首先他也有substr,trim等其他數據庫都有的普通函數,這裡我們介紹他更強大的一個函數substring,可以像python,java等編程語言一樣使用正則表達式,強大到極點
在此之前我們先瞭解一下正則表達式最基礎的四個
%代表一個或多個字符 _代表一個字符 ^代表字符前 $代表字符後
pg的官網上對其用法是下面這樣,但不夠清楚瞭然,下面我一一解釋
第一個
用法和substr差不多,是指定序列,from 2 for 3 是從序列為2的位置開始取3個字符。例子如上
第二個
例子用法的意思是:$代表字符後, 一個點代表一個字符,即從最末尾開始選擇3個字符,同樣的如果是substring(‘Thomas’ from ‘^….’) 則結果是Thom
第三個
用法是最實用的,也是最難理解的,先大致理解:
from ‘%#”o_a#”_’ for ‘#’ 中from是開始(包含),for後面跟的是逃逸,即結束
這個例子的意思是我想要o_a的組合字符,其中o_a的多個(%)字符不要,後面的一個(_)字符不要,這裡要註意的是切分後面剩多少字符寫幾個_
這裡的架構可以理解為固定的,即 from ‘#”#”‘ for ‘#’ #” 是分割字符,可以在#”前中後限定選擇你最想要的字符
下面用實例來講解一下第三個用法
需求:下圖的查詢結果是查的日志表,我想要【】裡的數據,由於【】裡字符長度不固定,又隻能用sql來切割,因此隻能使用第三種方法來獲取【】裡的數據
解決1:
根據上面的思想,我可以寫這樣的架構’【#”%#”_______’ FOR ‘#’,試著運行一下
SELECT SUBSTRING ( log_txt FROM '【#"%#"_______' FOR '#' ) log_txt FROM operation_log WHERE log_type = '15' LIMIT 3
解決2:
也可以根據position這個函數來解決,這個函數類似於python的index,就是把字符串的某個字符轉變為該字符所在的位置數,如此一來便可以使用substring的第一個例子用法,即
SUBSTRING ( log_txt FROM 2 FOR position('【'))
ooook 搞定瞭!!!
補充:Postgresql之split_part()切割函數
如下所示:
split_part(string text, delimiter text2, field int)
text要切割的字段; text2按照什麼形式切割 int截取的位置
ps:
text=“name.cn” split_part(text,'.',1) 結果: name text=“name.cn” split_part(text,'.',2) 結果: cn text=“name.cn.com” split_part(text,'.',3) 結果: com
以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。如有錯誤或未考慮完全的地方,望不吝賜教。
推薦閱讀:
- PostgreSQL 字符串處理與日期處理操作
- Postgresql 截取字符串的案例
- Java 切割字符串的幾種方式集合
- 解析MySQL索引的作用
- postgresql 中position函數的性能詳解