PostGreSQL 字符串處理
組合函數
- concat 組合函數,將多個字符串拼接爲一個字符串。concat函數純粹是一個拼接函數,可以忽略null值拼接,拼接的值沒有分隔符,如果需要分割符,則需要用下面的函數concat_ws。
- concat_ws concat_ws函數比concat函數多了分隔符的功能,其實就是concat的升級版,假如分隔符爲’’,則取出來的結果和concat是一樣的。concat_ws分隔符還支持多個字符作爲分隔符的,日常用得更多的可能是||。
切割函數
- split_part 按分隔符切割字符串並返回指定位置的字符串
- regexp_split_to_table 按分隔符切割字符串,以行數據返回分割後的字符串
--按分割符切割
SELECT regexp_split_to_table('kenyon, china loves',E'\\s');
regexp_split_to_table
-----------------------
kenyon,
china
loves
-- 按字母分割
SELECT regexp_split_to_table('kenyon,,china', E'\\s*');
regexp_split_to_table
-----------------------
k
e
n
y
o
n
,
,
c
h
i
n
a
- regexp_split_to_array 按分隔符切割字符串,以數組形式返回分割後的字符串
SELECT regexp_split_to_array('kenyon,love,,china,!',',');
regexp_split_to_array
--------------------------
{kenyon,love,"",china,!}
SELECT regexp_split_to_array('kenyon,love,,china!','s*');
regexp_split_to_array
-----------------------------------------------
{k,e,n,y,o,n,",",l,o,v,e,",",",",c,h,i,n,a,!}
PostGreSQL 字符串截取
select split_part('AAA-BBBB-CCCCC','-',2)
該 SQL 語句的意思是根據 ‘-’ 將字符串進行分割,並返回分割後的第二部分
如果分隔符數量不一致的話,需要先計算分隔符的個數
-- 將 1個分隔符 替換爲 2個分隔符,然後用長度相減得到分隔符數
-- 最後 +1 是爲了取最後一部分內容
select split_part(table.column ,'-', length(replace(table.column, '-', '--')) - length(table.column) + 1)
from table
PostGreSQL 字符串拼接
select concat_ws(':', 'aaa', 'bbb')
-- aaa:bbb
-- 幾行數據中的 同一 單字段值根據連接符拼接
select string_agg(name, '\r\n') from student
-- 1號\r\n2號\r\n3號\r\n4號\r\n5號
-- 如果要將多個字段的值拼接成一個:
select string_agg(concat_ws(':', name, sex),'\r\n' order by id) as xxx from student
-- 1號:0 \r\n 2號:0 \r\n 3號:0 \r\n 4號:0 \r\n 5號:1
PostGreSQL 日期時間函數
-- 獲取系統時間:
select now();
select current_timestamp;
-- 倆函數效果一樣
-- 獲取日期:
select current_date;
-- 獲取時間:
select current_time;
-- 獲取當前日期一小時後:(Years、Months、Weeks、Days、Hours、Minutes、Seconds)
select now() + '1 hour';
-- 日期時間的截取
-- EXTRACT(field FROM source)
-- field 表示取的時間對象,source 表示取的日期來源,類型爲 timestamp、time 或 interval。
select extract(year from now());