PostgreSQL 一些比較好用的字符串函數


    最近剛接觸到PostgreSQL數據庫,發現很多功能比較強大的內置函數,特此記錄下來。示例下次再補。

1.concat

字符串連接函數

 

2.concat_ws

concat_ws函數連接可自定義分隔符

 

3.rpad | lpad

字符串填充或者縮短,如

rpad(s1,len,s2)返回字符串s1,其右邊被字符串s2填補至len字符長度。假如字符串的長度大於len,則返回值被縮短到與len字符相同的長度。

 

4.split_part 

字符串分割,根據特定字符,指定位置返回值。split_part('1,2,3,4',',',3) 返回3

 

5.regexp_split_to_table

根據特殊字符,將字符串分割成表

 

6.regexp_split_to_array

根據特殊字符,將字符串分割成數據

 

 

圖來自網絡

select regexp_split_to_table(coalesce('/home/postgres/pg_basebackup.sh',''),E'\/') 
;  

        regexp_split_to_array        
-------------------------------------
 {"",home,postgres,pg_basebackup.sh}
(1 row)

Time: 0.315 ms

 

7.ARRAY_AGG

把表達式變成一個數組 一般配合 array_to_string() 函數使用

 

 

 

 

 

 

 

8.STRING_AGG

string_agg(expression, delimiter) 直接把一個表達式變成字符串

 

 

 

 

9.ARRAY

array(SELECT att.name FROM ay_tree_test2 att) 即把查詢出來的name字段轉化成array數組

 

 

 

 

10.array_to_string

array_to_string(“數組”,”/”) 即把數組轉化為字符串,並用“/”連接(使用提供的分隔符連接數組元素)

 

11.position

  子串在一字符串中的位置,position('om' in 'Thomas') = 3

12.overlay

替換字符串中任意長度的子字串為新字符串

 

13.trim

去除盡可能長開始,結束或者兩邊的某類字符,默認為去除空白字符,當然可以自己指定,可同時指定多個要刪除的字符串
例子:trim(both 'x' from 'xTomxx') = Tom

 

14.btrim

去除字符串兩邊的所有指定的字符,可同時指定多個字符
例子:btrim('xyxtrimyyx', 'xy') = trim

 

15.quote_literal

將一數值轉換為字符串,並為其兩邊加上單引號,如果數值中間出現了單引號,也會被表示成兩個單引號
例子:quote_literal(42.5) = '42.5'

 

16.regexp_replace

利用正則表達式對字符串進行替換
例子:regexp_replace('Thomas', '.[mN]a.', 'M') = ThM

 

17.repeat

重復字符串一指定次數
例子:repeat('Pg', 4) = PgPgPgPg

 

18.strpos

指定字符串在目標字符串的位置
例子:strpos('high', 'ig') = 2

 

19.generate_series

PostgreSQL 中有一個很有用處的內置函數generate_series,可以按不同的規則產生一系列的填充數據。

函數 參數類型 返回類型 描述
generate_series(start, stop) int 或 bigint setof int 或 setof bigint(與參數類型相同) 生成一個數值序列,從start 到 stop,步進為一
generate_series(start, stop, step) int 或 bigint setof int 或 setof bigint(與參數類型相同) 生成一個數值序列,從start 到 stop,步進為step
generate_series(start, stop, step_interval) timestamp or timestamp with time zone timestamp 或 timestamp with time zone(same as argument type) 生成一個數值序列,從start 到 stop,步進為step

 

david=# select generate_series(1, 10);
 generate_series 
-----------------
               1
               2
               3
               4
               5
               6
               7
               8
               9
              10
(10 rows)

 


免責聲明!

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



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