1. 程式人生 > >postgresql——字符串函數

postgresql——字符串函數

表示 abc 如果 進制 長度 rpad baidu 多字節字符 連接參數

字符串函數:

postgresql中的字符串函數有:計算字符串長度函數、字符串合並函數、字符串替換函數、字符串比較函數、查找指定字符串位置函數等。



1、計算字符串字符數和字符串長度的函數:char_length(str)和length(str)

char_length(str)返回值為字符串str所包含的字符個數。一個多字節字符算作一個單字符。


例子:使用char_length函數計算字符串字符個數,如:


testdb=# select char_length('date'),char_length('zhang');

char_length | char_length

-------------+-------------

4 | 5

(1 row)


length(str)返回值為字符串的字節長度,使用utf8編碼字符集時,一個漢字是3字節,一個數字或字母算一個字節。

testdb=# select length('date'),length('zhang');

length | length

--------+--------

4 | 5

(1 row)


註意:length函數的計算結果和char_length函數相同,因為英文字符的個數和所占字節相同,一個字符占一個字節。


2、合並字符串函數:concat(s1,s2,,,,)、concat_ws(x,s1,s2,,,,)

concat(s1,s2,,,)返回結果為連接參數產生的字符串。任何一個參數為null,返回值就為null。如果所有參數為非二進制字符串,那麽結果為非二進制字符串。如果自變量中含有任一二進制字符串,那麽結果就為一個二進制字符串。

concat_ws(x,s1,s2,,,)x是與其他參數的分隔符。


例子:使用concat函數連接字符串,如下:

testdb=# select concat('postgresql','9.6'),concat('postgresql',null,'testdb');

concat | concat

---------------+------------------

postgresql9.6 | postgresqltestdb

(1 row)



例子:使用concat_ws函數連接帶分隔符的字符串,如:

testdb=# select concat_ws('_','postgresql','9.6'),concat_ws('**','postgresql',null,'testdb');

concat_ws | concat_ws

----------------+--------------------

postgresql_9.6 | postgresql**testdb

(1 row)



3、獲取指定長度的字符串的函數:left(s,n)和right(s,n)

left(s,n)返回字符串s開始的最左邊n個字符。


例子:使用left函數返回字符串中左邊開始的5個字符,如

testdb=# select left('football',5);

left

-------

footb

(1 row)


right(s,n)返回字符串s最右邊個字符


例子:使用right函數返回字符串中右邊的字符,如:

testdb=# select right('football',4);

right

-------

ball

(1 row)


4、填充字符串的函數:lpad(s1,len,s2)和rpad(s1,len,s2)

lpad(s1,len,s2)返回字符串s1,其左邊由字符s2填充,填充長度為len,加入s1的長度大於len,則返回值被縮短至len字符。


例子:使用lpad函數對字符串進行填充操作,如下:


testdb=# select lpad('hello',4,'??'),lpad('hello',10,'??');

lpad | lpad

------+------------

hell | ?????hello

(1 row)


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


例子:使用rpad函數對字符串進行填充操作,如:

testdb=# select rpad('hello',4,'?'),rpad('hello',10,'?');

rpad | rpad

------+------------

hell | hello?????

(1 row)


5、刪除空格的函數:ltrim(s)、rtrim(s)和trim(s)

ltrim(s)返回字符串s,字符串左側空格字符被刪除。


例子:使用ltrim函數刪除字符串左邊的空格,如:

testdb=# select '( book )',concat('(',ltrim(' book '),')');

?column? | concat

----------+---------

( book ) | (book )

(1 row)


rtrim(s)返回字符串s,字符串右側空格字符被刪除。


例子:使用rtrim函數刪除字符串右邊的空格,如:


testdb=# select '( book )',concat('(',rtrim(' book '),')');

?column? | concat

----------+---------

( book ) | ( book)

(1 row)


trim(s)刪除字符串s兩側的空格。


例子:使用trim函數刪除指定字符串兩端的空格,如:

testdb=# select '( book )',concat('(',trim(' book '),')');

?column? | concat

----------+--------

( book ) | (book)

(1 row)


6、刪除指定字符串的函數:trim(s1 from s)


trim(s1 from s)刪除字符串s中兩端所有的子字符串s1.s1為可選項,在未指定情況下刪除空格。


例子:使用trim(s1 from s)函數刪除字符串中兩端指定的字符,如:

testdb=# select trim('zh' from 'zhanghellzhnihao');

btrim

----------------

anghellzhnihao

(1 row)


7、重復生成字符串的函數:repeat(s,n)

repeat(s,n)返回一個由重復的字符串s組成的字符串,n表示重復生成的次數。若n<=0,則返回一個空字符串;若s或n為null,則返回null。


例子:使用repeat函數重復生成相同的字符串,如:

testdb=# select repeat('zhang',3);

repeat

-----------------

zhangzhangzhang

(1 row)


8、替換函數:replace(s,s1,s2)

replace(s,s1,s2)使用字符串s2替代字符串s中所有字符串s1.


例子:使用replace函數進行字符串替代操作。

testdb=# select replace('www.baidu.com','w','z');

replace

---------------

zzz.baidu.com

(1 row)


9、獲取子串的函數:substring(s,n,len)

substring(s,n,len)表示從字符串s返回一個長度為len的子字符串,起始於位置n。也可能對n使用一個負值。假若這樣,則子字符串的位置起始於字符串結尾的n的字符,即倒數第n個字符。

testdb=# select substring('zhanghello',5) as a1,substring('zhanghello',5,3) as a2,substring('lunch',-3) as a3;

a1 | a2 | a3

--------+-----+-------

ghello | ghe | lunch

(1 row)


註意:如果對len使用的是一個小於1的值,那麽結果始終為整個字符串。


10、匹配子串開始位置的函數:position(str1 in str)

position(str1 in str)函數的作用是返回子字符串str1在字符串str中的開始位置。


例子:使用position函數查找字符串中指定str1在字符串的開始位置,如:

testdb=# select position('ball' in 'football');

position

----------

5

(1 row)


11、字符串逆序函數:reverse(s)

reverse(s)將字符串s反轉,返回的字符串的順序和s字符順序相反。


例子:使用reverse函數反轉字符串,如:

testdb=# select reverse('abc');

reverse

---------

cba

(1 row)


postgresql——字符串函數