PostgreSQL字符切割:substring函數(shù)的用法說明
作為當(dāng)前最強(qiáng)大的開源數(shù)據(jù)庫,Postgresql(以下簡稱pg)對字符的處理也是最為強(qiáng)大的,首先他也有substr,trim等其他數(shù)據(jù)庫都有的普通函數(shù),這里我們介紹他更強(qiáng)大的一個函數(shù)substring,可以像python,java等編程語言一樣使用正則表達(dá)式,強(qiáng)大到極點
在此之前我們先了解一下正則表達(dá)式最基礎(chǔ)的四個
%代表一個或多個字符 _代表一個字符 ^代表字符前 $代表字符后
pg的官網(wǎng)上對其用法是下面這樣,但不夠清楚了然,下面我一一解釋
第一個
用法和substr差不多,是指定序列,from 2 for 3 是從序列為2的位置開始取3個字符。例子如上
第二個
例子用法的意思是:$代表字符后, 一個點代表一個字符,即從最末尾開始選擇3個字符,同樣的如果是substring('Thomas' from '^....') 則結(jié)果是Thom
第三個
用法是最實用的,也是最難理解的,先大致理解:
from '%#"o_a#"_' for '#' 中from是開始(包含),for后面跟的是逃逸,即結(jié)束
這個例子的意思是我想要o_a的組合字符,其中o_a的多個(%)字符不要,后面的一個(_)字符不要,這里要注意的是切分后面剩多少字符寫幾個_
這里的架構(gòu)可以理解為固定的,即 from '#"#"' for '#' #" 是分割字符,可以在#"前中后限定選擇你最想要的字符
下面用實例來講解一下第三個用法
需求:下圖的查詢結(jié)果是查的日志表,我想要【】里的數(shù)據(jù),由于【】里字符長度不固定,又只能用sql來切割,因此只能使用第三種方法來獲取【】里的數(shù)據(jù)
解決1:
根據(jù)上面的思想,我可以寫這樣的架構(gòu)'【#"%#"_______' FOR '#',試著運行一下
SELECT SUBSTRING ( log_txt FROM '【#"%#"_______' FOR '#' ) log_txt FROM operation_log WHERE log_type = '15' LIMIT 3
解決2:
也可以根據(jù)position這個函數(shù)來解決,這個函數(shù)類似于python的index,就是把字符串的某個字符轉(zhuǎn)變?yōu)樵撟址诘奈恢脭?shù),如此一來便可以使用substring的第一個例子用法,即
SUBSTRING ( log_txt FROM 2 FOR position('【'))
ooook 搞定了?。。?/p>
補(bǔ)充:Postgresql之split_part()切割函數(shù)
如下所示:
split_part(string text, delimiter text2, field int)
text要切割的字段; text2按照什么形式切割 int截取的位置
ps:
text=“name.cn” split_part(text,'.',1) 結(jié)果: name text=“name.cn” split_part(text,'.',2) 結(jié)果: cn text=“name.cn.com” split_part(text,'.',3) 結(jié)果: com
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。如有錯誤或未考慮完全的地方,望不吝賜教。
相關(guān)文章
PostgreSQL 如何獲取當(dāng)前日期時間及注意事項
這篇文章主要介紹了PostgreSQL 如何獲取當(dāng)前日期時間及注意事項,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-10-10CentOS PostgreSQL 12 主從復(fù)制(主從切換)操作
這篇文章主要介紹了CentOS PostgreSQL 12 主從復(fù)制(主從切換)操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-01-01PostgreSQL如何按照某一字段去重,并顯示其他字段信息
這篇文章主要介紹了PostgreSQL如何按照某一字段去重,并顯示其他字段信息問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-05-05PostgreSQL中查看當(dāng)前時間和日期的幾種常用方法
在 PostgreSQL 中,有多個函數(shù)可以用來查看當(dāng)前時間和日期,這些函數(shù)在處理時間戳、日期和時間的計算時非常有用,以下是幾種常用的查看當(dāng)前時間和日期的函數(shù)及示例,需要的朋友可以參考下2024-10-10postgresql 刪除重復(fù)數(shù)據(jù)案例詳解
這篇文章主要介紹了postgresql 刪除重復(fù)數(shù)據(jù)案例詳解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-08-08使用postgresql獲取當(dāng)前或某一時間段的年月日
這篇文章主要給大家介紹了關(guān)于使用postgresql獲取當(dāng)前或某一時間段的年月日的相關(guān)資料,在PostgreSQL中可以使用函數(shù) NOW() 來查詢當(dāng)前時間,文中通過代碼示例介紹的非常詳細(xì),需要的朋友可以參考下2023-07-07Postgres bytea類型 轉(zhuǎn)換及查看操作
這篇文章主要介紹了Postgres bytea類型 轉(zhuǎn)換及查看操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-12-12在postgresql中運行sql文件并導(dǎo)出結(jié)果的操作
這篇文章主要介紹了在postgresql中運行sql文件并導(dǎo)出結(jié)果的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-01-01