最近剛接觸到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)
