字符串函数
M-Compatibility提供字符串函数对字符串进行处理。
- 对于对字符串位置进行操作的函数,第一个位置的编号为1。
- 对于使用了长度作为参数的函数,非整数的参数将四舍五入到最接近的整数。
- 如果数据库字符集是SQL_ASCII,数据库将把字节值0-127根据 ASCII标准解释,而字节值128-255则当作无法解析的字符。如果设置为SQL_ASCII,数据库将无法转换或者校验非ASCII字符,导致CHAR_LENGTH、FIND_IN_SET、LEFT、LOWER、REVERSE、RIGHT、STRCMP、TRIM等字符串函数产生未预期的结果。如果使用了任意非ASCII数据,都不建议将数据库的字符集设置为SQL_ASCII。
ASCII
ASCII(str)
描述:返回字符串str最左侧字符的ASCII码值,str为空字符串时返回0,str为NULL时返回NULL。
返回值类型:INT
示例:
m_db=# SELECT ASCII('');
ascii
-------
0
(1 row)
m_db=# SELECT ASCII('abc');
ascii
-------
97
(1 row)
m_db=# SELECT ASCII(NULL);
ascii
-------
(1 row)
BIN
BIN(INT N)
描述:返回N的二进制值的字符串表示形式,与CONV(N,10,2)功能相同。
返回值类型:TEXT
示例:
m_db=# SELECT BIN(12); bin ------ 1100 (1 row)
BIT_LENGTH
BIT_LENGTH(str)
描述:返回字符串str的比特位长度。
返回值类型:BIGINT
示例:
m_db=# SELECT BIT_LENGTH('text');
bit_length
------------
32
(1 row)
CHAR
CHAR(INT N,... [USING charset_name])
描述:将每个参数N通过ASCII码转换成对应的字符。其中charset_name为字符集名称。
返回值类型:TEXT/BLOB
示例:
m_db=# SELECT CHAR(71,97,117,115,115); char ------- Gauss (1 row) m_db=# SELECT CHAR(71,97,117,115,115 using utf8); char ------- Gauss (1 row)
CHAR_LENGTH
CHAR_LENGTH(str)
描述:返回字符串str包含的字符数,多字节的字符会被计为1个字符。例如,输入2个2字节的字符,LENGTH()返回4,而CHAR_LENGTH()返回2。
返回值类型:BIGINT
示例:
m_db=# SELECT CHAR_LENGTH('text');
char_length
-------------
4
(1 row)
CHARACTER_LENGTH
CHARACTER_LENGTH(str)
描述:与CHAR_LENGTH功能、用法相同。
返回值类型:BIGINT
示例:
m_db=# SELECT CHARACTER_LENGTH('text');
character_length
------------------
4
(1 row)
COMPRESS
COMPRESS (TEXT string_to_compress)
描述:压缩一个字符串,返回二进制字符串类型的结果。
返回值类型:LONGBLOB
示例:
m_db=# SELECT HEX(COMPRESS('abcde'));
HEX(COMPRESS('abcde'))
------------------------------------
05000000789C4B4C4A4E49050005C801F0
(1 row)
CONCAT
CONCAT(str1, str2, ..., strN)
描述:接受若干个字符串,按顺序将其拼接并返回拼接后的字符串。如果有一个字符串为NULL,则返回NULL。
返回值类型:TEXT/BLOB
示例:
m_db=# SELECT CONCAT('hello', 'world', '!');
concat
-------------
helloworld!
(1 row)
m_db=# SELECT CONCAT('hello', NULL, '!');
concat
--------
(1 row)
CONCAT_WS
CONCAT_WS(separator, str1, str2, ..., strN)
描述:把多个字符串按顺序进行拼接,相邻字符串使用separator进行分割。当separator为NULL时,返回NULL。当待拼接的字符串为NULL时,将被忽略。
返回值类型:TEXT/BLOB
示例:
m_db=# SELECT CONCAT_WS(',', 'hello', NULL, 'world', '!');
concat_ws
---------------
hello,world,!
(1 row)
m_db=# SELECT CONCAT_WS(NULL, 'hello', NULL, 'world', '!');
concat_ws
-----------
(1 row)
ELT
ELT(INT N, TEXT str1, TEXT str2, TEXT str3, ...)
描述:返回字符串列表的第N个元素。如果N为空、小于1、大于字符串总个数或者N位置处的字符串为NULL,则返回NULL。
参数说明:
N:用于指定位置。
str1, str2, str3, …:表示字符串参数列表,参数最大个数为8192。
返回值类型:TEXT/BLOB
示例:
m_db=# SELECT ELT (1,'a'); elt ----- a (1 row) m_db=# SELECT ELT (2,'a', 'b'); elt ----- b (1 row)
EXPORT_SET
EXPORT_SET (INT bits, TEXT on, TEXT off[, TEXT separator[, INT length]])
描述:根据参数的二进制位生成一个使用指定分隔符拼接的字符串,如果length不指定或者指定范围不在[0,64],length采用64位。将bits转换成二进制,如果bit位是1,采用on指定的字符串,如果bit位是0,采用off指定的字符串,中间使用separator指定的字符串隔离,separator不指定默认使用逗号(,)为隔离符。返回值的长度受GUC参数max_allowed_packet的影响,最大取值为Min(max_allowed_packet, 1073741819)。
参数说明:如表1所示。
|
名称 |
描述 |
|---|---|
|
bits |
必选,一个数字, bits中的比特值按照从右到左的顺序依次决定on或者off出现在该位置。 |
|
on |
必选,当对应bit的比特位值为1时,使用的字符串。 |
|
off |
必选,当对应bit的比特位值为0时,使用的字符串。 |
|
separator |
可选,分隔字符串,默认值为逗号(,)。 |
|
length |
可选,集合的元素个数,默认值为64。 |
返回值类型:TEXT
示例:
m_db=# SELECT EXPORT_SET(5, 'Y', 'N');
export_set
---------------------------------------------------------------------------------------------------------------------------------
Y,N,Y,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N
m_db=# SELECT EXPORT_SET(5,'Y','N','|');
export_set
---------------------------------------------------------------------------------------------------------------------------------
Y|N|Y|N|N|N|N|N|N|N|N|N|N|N|N|N|N|N|N|N|N|N|N|N|N|N|N|N|N|N|N|N|N|N|N|N|N|N|N|N|N|N|N|N|N|N|N|N|N|N|N|N|N|N|N|N|N|N|N|N|N|N|N|N
(1 row)
m_db=# SELECT EXPORT_SET(5,'Y','N','|', 5);
export_set
------------
Y|N|Y|N|N
(1 row)
FIELD
FIELD(str, str1, str2, str3, ...)
描述:field函数返回str在str1、str2、str3等列表中的位置。从1开始递增,返回0表示str不在str1、str2、str3等列表中。
- 如果str为NULL或者不在str1、str2、str3等列表时,直接返回0。
- 函数入参全部为数字时按照数字进行比较,入参全部为非数字类型时按照字符串进行比较,入参存在数字和非数字混合时按照DOUBLE类型进行比较。
示例:
m_db=# SELECT FIELD(1,2,1);
field
------
2
(1 row)
m_db=# SELECT FIELD('a','b','a');
field
------
2
(1 row)
m_db=# SELECT FIELD('a',1,'b','a');
field
------
2
(1 row)
FIND_IN_SET
FIND_IN_SET(str, strlist)
描述:返回字符串str在字符串列表strlist中的位置,从1开始。字符串列表是1个包含若干个子字符串的字符串,各个子字符串之间使用逗号“,”进行分隔。
- 如果strlist中不包含str,返回0。
- 如果str或strlist为NULL,则返回NULL。
- 如果str中包含逗号,则返回0。
示例:
m_db=# SELECT FIND_IN_SET('e', 'a,b,c;d,e');
find_in_set
-------------
4
(1 row)
m_db=# SELECT FIND_IN_SET('a,', 'a,b,c;d,e');
find_in_set
-------------
0
(1 row)
m_db=# SELECT FIND_IN_SET(NULL, 'a,b,c;d,e');
find_in_set
-------------
(1 row)
FORMAT
FORMAT(INT X , INT D [, TEXT locale])
描述:将数字X格式化为指定格式(#,###,###.##),并按照指定的D进行四舍五入到小数点后D位,将结果作为字符串返回。如果D为0,则结果没有小数点或小数部分,如果X或D为NULL,则返回结果NULL。
参数:
X:必选,表示被格式化的数字。
D:必选,表示保留的小数位数。
locale:可选,表示特定的语言环境。
返回值类型:TEXT
- 此函数在参数m_format_dev_version值为's2'或以上版本且参数m_format_behavior_compat_options值包含'enable_conflict_funcs'的情况下为M-Compatibility兼容模式数据库实现行为,即本章节描述的行为;其他行为和《开发指南》中的“SQL参考 > 函数和操作符 > 数字操作函数和操作符”章节中的ceil函数保持一致。
- 在非M-Compatibility兼容模式数据库实现行为下,入参类型为M-Compatibility兼容模式所独有的数据类型时(例如BIGINT UNSIGNED),使用该函数结果可能存在异常。
示例:
m_db=# SELECT FORMAT(12332.123456, 4); format ------------- 12,332.1235 (1 row) m_db=# SELECT FORMAT(12332.123456,4,'de_DE'); format ------------- 12.332,1235 (1 row)
FROM_BASE64
FROM_BASE64(TEXT str)
描述:对通过TO_BASE64()返回的字符串进行解码,并将结果作为二进制字符串返回。返回值的长度受GUC参数max_allowed_packet的影响,最大取值为Min(max_allowed_packet, 1073741819)。
返回值类型:LONGBLOB
示例:
m_db=# SELECT FROM_BASE64('R2F1c3M=');
from_base64
-------------
Gauss
(1 row)
HEX
- HEX(str)
描述:将字符串str转换为十六进制字符串,str中的每个字符的每个字节都转换为两个十六进制数字,其逆运算为UNHEX。
返回值类型:TEXT
示例:
m_db=# SELECT HEX('abc'), UNHEX(HEX('abc')); hex | unhex --------+------- 616263 | abc (1 row) - HEX(N)
返回值类型:TEXT
示例:
m_db=# SELECT HEX(255); hex ----- FF (1 row)
INSERT
INSERT(str,pos,len,newstr)
描述:使用newstr将str内从pos位置开始的len个字符长度的内容进行替换后输出。
|
参数 |
类型 |
描述 |
|---|---|---|
|
str |
TEXT |
原始字符串 |
|
pos |
INT |
替换起始位置 |
|
len |
INT |
替换长度 |
|
newstr |
TEXT |
替换的子字符串 |
返回值类型:VARCHAR/VARBINARY/LONGTEXT/LONBLOB
示例:
m_db=# SELECT INSERT('abcdefg',2,3,'mmm');
insert
---------
ammmefg
(1 row)
--入参中任一参数为NULL时,函数返回NULL。
m_db=# SELECT INSERT(NULL, 2, 4, 'yyy');
insert
--------
(1 row)
--位置信息异常时,返回原字符串。
m_db=# SELECT INSERT('abcdefg', -100, 4, 'yyy');
insert
---------
abcdefg
(1 row)
INSTR
INSTR(str,substr)
描述:返回substr在str中第一次出现的位置。
|
参数 |
类型 |
描述 |
|---|---|---|
|
str |
TEXT |
原始字符串 |
|
substr |
TEXT |
待查找的子字符串 |
返回值类型:INT
示例:
m_db=# SELECT INSTR('absbbsod','bs');
instr('absbbsod','bs')
------------------------
2
(1 row)
--入参含NULL时,函数返回NULL。
m_db=# SELECT INSTR('abcd12abc',null);
instr
-------
(1 row)
LCASE
LCASE(str)
描述:将字符串中的大写字符转换为小写字母。LCASE与LOWER功能、用法一致。
返回值类型:TEXT/BLOB
示例:
m_db=# SELECT LCASE('Hello,world!');
lcase
--------------
hello,world!
(1 row)
LEFT
LEFT(str, len)
描述:返回字符串str最左侧的len个字符,如果str或len为NULL,返回NULL。
返回值类型:TEXT/BLOB
示例:
m_db=# SELECT LEFT('abcdef', 3);
left
------
abc
(1 row)
m_db=# SELECT LEFT('abcdef', NULL);
left
------
(1 row)
m_db=# SELECT LEFT('abcdef', 11);
left
--------
abcdef
(1 row)
LENGTH
LENGTH(str)
描述:返回字符串str包含的字节数,多字节的字符会被计为多个字节。例如,输入2个2字节的字符,LENGTH()返回4,而CHAR_LENGTH()返回2。
返回值类型:BIGINT
示例:
m_db=# SELECT LENGTH('text');
char_length
-------------
4
(1 row)
LOCATE
LOCATE(TEXT substr, TEXT str[, INT pos])
描述:返回字符串substr在字符串str中第一次出现的位置,从位置pos(默认为1)开始计算。如果在str中无法匹配到substr,则返回0。
参数:
substr:必选,表示要搜索的子字符串。
str:必选,表示将被搜索的字符串。
pos:可选,表示搜索的起始位置。
返回值类型:BIGINT
示例:
m_db=# SELECT LOCATE('bar', 'foobarbar');
locate
--------
4
(1 row)
m_db=# SELECT LOCATE('bar', 'foobarbar',5);
locate
--------
7
(1 row)
LOWER
LOWER(str)
描述:将字符串中的大写字母转换为小写字母。LOWER的功能、用法和LCASE一致。
返回值类型:TEXT/BLOB
示例:
m_db=# SELECT LOWER('Hello,world!');
lower
--------------
hello,world!
(1 row)
LPAD
LPAD(str, len, padstr)
描述:使用字符串padstr从左侧填充字符串str,直到长度为len。返回值的长度受GUC参数max_allowed_packet的影响,最大取值为Min(max_allowed_packet/函数返回值字符集单字符最大长度, 1073741819)。
参数:参数具体说明见下表。
|
参数 |
类型 |
描述 |
|---|---|---|
|
str |
TEXT |
待被填充的字符串 |
|
len |
INT |
填充后字符串的长度 |
|
padstr |
TEXT |
用于填充的字符串 |
返回值类型:TEXT/BLOB
- 如果str长度大于len,则返回str左侧的len个字符。
- 如果str、len、padstr中有一个为NULL,则返回NULL。
- 如果len为负数,则返回NULL。
示例:
m_db=# SELECT LPAD('hello', 10, 'abc');
lpad
------------
abcabhello
(1 row)
m_db=# SELECT LPAD('hello', 3, 'abc');
lpad
------
hel
(1 row)
m_db=# SELECT LPAD('hello', 10, NULL);
lpad
------
(1 row)
m_db=# SELECT LPAD('hello', -10, 'abc');
lpad
------
(1 row)
LTRIM
LTRIM(str)
描述:删除字符串str左侧的空格。
返回值类型:TEXT/BLOB
示例:
m_db=# SELECT LTRIM(' hello ');
ltrim
----------
hello
(1 row)
MAKE_SET
MAKE_SET(INT bits, TEXT str1, TEXT str2,...)
描述:返回一个分隔子字符串的字符串,字符串由参数集合中相应位置的字符串组成,str1对应bit0,str2对应bit1。函数最多能处理64项str入参,当超过64项时只截取前64项。bits获取最右侧N位bit值。
返回值类型:TEXT
示例:
m_db=# SELECT MAKE_SET(5,'hello','nice','world'); make_set ------------- hello,world (1 row)
MD5
MD5(TEXT str)
描述:用于计算一个给定字符串的MD5摘要,并将结果作为一个32位的(由十六进制字符组成的)字符串返回。如果参数为NULL,则返回NULL。
返回值类型:TEXT
示例:
m_db=# SELECT MD5('Gauss');
md5
----------------------------------
edc41fb7bf8bdac012523d1bcd949a4f
(1 row)
- MD5加密算法安全性低,存在安全风险,不建议使用。
- MD5函数会在日志中记录哈希的明文,因此不建议用户用该函数加密密钥等敏感信息。
MID
MID(TEXT str, INT pos)
描述:输出str从pos位置开始到str结尾的字符串,MID函数与SUBSTR函数完全一致,内部沿用SUBSTR函数。在升级观察期期间,调用MID函数创建视图,回滚之后由于SUBSTR函数没有被删除,导致该视图不会被删除。
返回值类型:TEXT/BLOB
示例:
m_db=# SELECT MID('foobarbarfoobar', 4);
mid
--------------
barbarfoobar
(1 row)
MID(str FROM pos)
描述:输出str从pos位置开始到结尾的字符串。
返回值类型:TEXT/BLOB
示例:
m_db=# SELECT MID('foobarbarfoobar' FROM 4);
mid
--------------
barbarfoobar
(1 row)
MID(TEXT str, INT pos, INT len)
描述:输出str从pos位置开始之后len个字符长度所组成的字符串。
返回值类型:TEXT/BLOB
示例:
m_db=# SELECT MID('foobarbarfoobar', 4, 9);
mid
-----------
barbarfoo
(1 row)
MID(str FROM pos FOR len)
描述:输出str从pos位置开始之后len个字符长度所组成的字符串。
返回值类型:TEXT/BLOB
示例:
m_db=# SELECT MID('foobarbarfoobar' FROM 4 FOR 9);
mid
-----------
barbarfoo
(1 row)
ORD
ORD(TEXT str)
描述:返回字符串参数中的第一个字符的字符代码。
- 如果第一个字符为单字节字符,函数返回字符的ASCII值。
- 如果第一个字符是多字节字符,返回逻辑为:第一个字节代码 + 第二个字节的代码 * 256 + 第三个字节的代码 * 256 * 256,即result += char[n] << (8*n),其中n为字节下标。
返回值类型:BIGINT
示例:
m_db=# SELECT ORD('gauss');
ord
-----
103
(1 row)
OCTET_LENGTH
OCTET_LENGTH(str)
描述:以字节为单位返回字符串str的长度,即字节的数量。如果str不是字符串类型,以其标准输出格式的字符串的长度为准。
返回值类型:BIGINT
示例:
m_db=# SELECT OCTET_LENGTH('text');
octet_length
--------------
4
(1 row)
POSITION
POSITION(substr in str)
描述:返回字符串substr在字符串str中第一次出现的位置,与LOCATE(substr,str)功能相同。
返回值类型:BIGINT
- 此函数在参数m_format_dev_version值为's2'或以上版本且参数m_format_behavior_compat_options值包含'enable_conflict_funcs'的情况下为M-Compatibility兼容模式数据库实现行为,即本章节描述的行为;其他行为和《开发指南》中的“SQL参考 > 函数和操作符 > 数字操作函数和操作符”章节中的ceil函数保持一致。
- 在非M-Compatibility兼容模式数据库实现行为下,入参类型为M-Compatibility兼容模式所独有的数据类型时(例如BIGINT UNSIGNED),使用该函数结果可能存在异常。
示例:
m_db=# SELECT POSITION('bs' in 'absbbsod');
position
----------
2
(1 row)
QUOTE
QUOTE(TEXT str)
描述:在字符串str两端分别添加单引号后进行输出。同时可以将str中的特殊字符进行转义,包括\\、\'或Control+Z(\Z)。如果参数为NULL,则返回值为字符串“NULL”,而不括起单引号。
返回值类型:VARCHAR/LONGTEXT/VARBINARY/LONGBLOB
示例:
m_db=# SELECT QUOTE('Do not do that.');
quote
-------------------
'Do not do that.'
(1 row)
-- 字符串中含有也是字符\\、\'或Control+Z(\Z)。
m_db=# SELECT QUOTE('Don\\t do that.');
quote
-------------------
'Don\\t do that.'
(1 row)
m_db=# select quote('Don\Zt do that.');
quote
-------------------
'Don\Zt do that.'
(1 row)
m_db=# select quote('Don\'t do that.');
quote
-------------------
'Don\'t do that.'
(1 row)
m_db=# SELECT QUOTE(null);
quote
-------
NULL
(1 row)
RANDOM_BYTES
RANDOM_BYTES(INT len)
描述:返回指定长度len的随机字符串。如果入参为NULL,则返回NULL,如果入参值不在[1, 1024],则返回“ Length value is out of range ”的错误信息。
返回值类型:BLOB
示例:
m_db=# SELECT RANDOM_BYTES(1); random_bytes -------------- q (1 row)
REPEAT
REPEAT(str, count)
描述:返回字符串str重复count次组成的字符串。如果count小于等于0,返回NULL。如果str或者count为NULL,返回NULL。返回值的长度受GUC参数max_allowed_packet的影响,最大取值为Min(max_allowed_packet, 1073741819)。
返回值类型:TEXT/BLOB
示例:
m_db=# SELECT REPEAT('abc', 3);
repeat
-----------
abcabcabc
(1 row)
m_db=# SELECT REPEAT('abc', NULL);
repeat
--------
(1 row)
m_db=# SELECT REPEAT('abc', -1);
repeat
--------
(1 row)
REPLACE
REPLACE(str, from_str, to_str)
描述:使用字符串to_str替换字符串str中的字符串from_str,替换时区分大小写。当有任意一个参数为NULL时,返回NULL。返回值的长度受GUC参数max_allowed_packet的影响,最大取值为Min(max_allowed_packet, 1073741819)。
参数:参数具体说明见下表。
|
参数 |
类型 |
描述 |
|---|---|---|
|
str |
TEXT |
待被替换的字符串 |
|
from_str |
TEXT |
查找目标 |
|
to_str |
TEXT |
替换成 |
返回值类型:TEXT/BLOB
示例:
m_db=# SELECT REPLACE('abc,efg,hijk,abcde,dabc,e', 'abc', 'xyz');
replace
---------------------------
xyz,efg,hijk,xyzde,dxyz,e
(1 row)
m_db=# SELECT REPLACE('abc,efg,hijk,abcde,dabc,e', NULL, 'xyz');
replace
---------
(1 row)
REVERSE
REVERSE(str)
描述:返回字符串str的倒序排列。
返回值类型:TEXT/BLOB
示例:
m_db=# SELECT REVERSE('abcd');
reverse
---------
dcba
(1 row)
RIGHT
RIGHT(str, len)
描述:返回字符串str最右边len个字符,如果str或len为NULL,则返回NULL。
返回值类型:TEXT/BLOB
示例:
m_db=# SELECT RIGHT('abcdef', 4);
right
-------
cdef
(1 row)
m_db=# SELECT RIGHT('abcdef', NULL);
right
-------
(1 row)
RPAD
RPAD(str, len, padstr)
描述:使用字符串padstr从右侧填充字符串str,直到长度为len。返回值的长度受GUC参数max_allowed_packet的影响,最大取值为Min(max_allowed_packet/函数返回值字符集单字符最大长度, 1073741819)。
参数:参数具体说明见下表。
|
参数 |
类型 |
描述 |
|---|---|---|
|
str |
TEXT |
待被填充的字符串 |
|
len |
INT |
填充后字符串的长度 |
|
padstr |
TEXT |
用于填充的字符串 |
返回值类型:TEXT/BLOB
- 如果str长度大于len,则返回str左侧的len个字符。
- 如果str、len、padstr中有一个为NULL,则返回NULL。
- 如果len为负数,则返回NULL。
示例:
m_db=# SELECT RPAD('hello', 10, 'abc');
rpad
------------
helloabcab
(1 row)
m_db=# SELECT RPAD('hello', 3, 'abc');
rpad
------
hel
(1 row)
m_db=# SELECT RPAD('hello', 10, NULL);
rpad
------
(1 row)
m_db=# SELECT RPAD('hello', -10, 'abc');
rpad
------
(1 row)
RTRIM
RTRIM(str)
描述:删除字符串str右侧的空格。
返回值类型:TEXT/BLOB
示例:
m_db=# SELECT RTRIM(' hello ');
rtrim
---------
hello
(1 row)
SHA
SHA(str)
描述:计算字符串str的SHA-1 160位检验和。
参数:str,字符串或数字。
返回值:字符串类型。40个十六进制数字组成的字符串。
示例:
m_db=# SELECT SHA('abc');
sha
------------------------------------------
a9993e364706816aba3e25717850c26c9cd0d89d
(1 row)
- SHA1加密算法安全性低,存在安全风险,不建议使用。
- SHA函数会在日志中记录哈希的明文,因此不建议用户用该函数加密密钥等敏感信息。
SHA1
SHA1(str)
描述:SHA1是SHA函数的别名,功能用法相同。
示例:
m_db=# SELECT SHA1('abc');
sha1
------------------------------------------
a9993e364706816aba3e25717850c26c9cd0d89d
(1 row)
- SHA1加密算法安全性低,存在安全风险,不建议使用。
- SHA1函数会在日志中记录哈希的明文,因此不建议用户用该函数加密密钥等敏感信息。
SHA2
SHA2(str, hash_length)
描述:计算字符串str的SHA-2检验和。
参数:
str:字符串或数字。
hash_length:对应相应的SHA2算法,可选值为 0(SHA-256)、224(SHA-224)、256(SHA-256)、384(SHA-384)、512(SHA-512),其他值将返回NULL。
返回值:字符串类型。40个十六进制数字组成的字符串。
示例:
m_db=# SELECT SHA2('abc', 224);
sha2
----------------------------------------------------------
23097d223405d8228642a477bda255b32aadbce4bda0b3f7e36c9da7
(1 row)
- SHA224加密算法安全性低,存在安全风险,不建议使用。
- SHA2函数会在日志中记录哈希的明文,因此不建议用户用该函数加密密钥等敏感信息。
SPACE
SPACE(N)
描述:返回由N个空格组成的字符串,如果N小于等于0,返回空字符串。返回值的长度受GUC参数max_allowed_packet的影响,最大取值为Min(max_allowed_packet, 1073741819)。
返回值类型:TEXT
示例:
m_db=# SELECT CONCAT('a', SPACE(6), 'b');
concat
----------
a b
(1 row)
m_db=# SELECT CONCAT('a', SPACE(-1), 'b');
concat
--------
ab
(1 row)
STRCMP
STRCMP(str1, str2)
描述:比较str1与str2是否相同。
返回值类型:INT
- 如果 str1 等于 str2, STRCMP函数将返回 0。
- 如果 str1 小于 str2, STRCMP函数将返回 -1。
- 如果 str1 大于 str2, STRCMP函数将返回 1。
- 当任意个参数为 NULL 时, STRCMP函数将返回 NULL。
示例:
m_db=# SELECT STRCMP('abc', 'abc');
strcmp
--------
0
(1 row)
m_db=# SELECT STRCMP('abc1', 'abc');
strcmp
--------
1
(1 row)
m_db=# SELECT STRCMP('abc', 'abc1');
strcmp
--------
-1
(1 row)
m_db=# SELECT STRCMP('abc1', 'abc2');
strcmp
--------
-1
(1 row)
m_db=# SELECT STRCMP('abc1', NULL);
strcmp
--------
(1 row)
SUBSTR
SUBSTR函数有以下四种原型,各原型中str、pos以及len的含义一致。
- SUBSTR(str, pos)
- SUBSTR(str FROM pos)
- SUBSTR(str, pos, len)
- SUBSTR(str FROM pos FOR len)
- SUBSTR(str FOR len FROM pos)
- SUBSTR(str FOR len)
描述:返回str的子字符串,起始位置为pos,长度为len。不指定len时,返回的子字符串从pos位置开始,一直到str字符串的结尾。
- pos的位置从1开始计数。
- 参数中包含NULL时,返回NULL。
- pos为负数时,从str尾部向头部倒序确定起始位置。
- len小于等于0、pos的位置为0、pos的位置越界时,返回空字符串。
参数:参数具体说明见下表。
|
参数 |
类型 |
描述 |
|---|---|---|
|
str |
TEXT |
待被截取的字符串 |
|
pos |
INT |
起始位置 |
|
len |
INT |
子字符串的长度 |
返回值类型:TEXT/BLOB
示例:
m_db=# SELECT SUBSTR('abcdefg', 2, 3);
substr
--------
bcd
(1 row)
m_db=# SELECT SUBSTR('abcdefg', NULL);
substr
--------
(1 row)
m_db=# SELECT SUBSTR('abcdefg', 2);
substr
--------
bcdefg
(1 row)
m_db=# SELECT SUBSTR('abcdefg', -2, 3);
substr
--------
fg
(1 row)
m_db=# SELECT SUBSTR('abcdefg', -2);
substr
--------
fg
(1 row)
m_db=# SELECT SUBSTR('abcdefg', 0, 3);
substr
--------
(1 row)
SUBSTRING
SUBSTRING函数有以下四种原型,各原型中str、pos以及len的含义一致。
- SUBSTRING(str, pos)
- SUBSTRING(str FROM pos)
- SUBSTRING(str, pos, len)
- SUBSTRING(str FROM pos FOR len)
- SUBSTRING(str FOR len FROM pos)
- SUBSTRING(str FOR len)
描述:SUBSTRING与SUBSTR功能、用法一致。
参数:参数具体说明见下表。
|
参数 |
类型 |
描述 |
|---|---|---|
|
str |
TEXT |
待被截取的字符串 |
|
pos |
INT |
起始位置 |
|
len |
INT |
子字符串的长度 |
返回值类型:TEXT/BLOB
示例:
m_db=# SELECT SUBSTRING('abcdefg', 2, 3);
substring
-----------
bcd
(1 row)
m_db=# SELECT SUBSTRING('abcdefg', NULL);
substring
-----------
(1 row)
m_db=# SELECT SUBSTRING('abcdefg', 2);
substring
-----------
bcdefg
(1 row)
m_db=# SELECT SUBSTRING('abcdefg', -2, 3);
substring
-----------
fg
(1 row)
m_db=# SELECT SUBSTRING('abcdefg', -2);
substring
-----------
fg
(1 row)
m_db=# SELECT SUBSTRING('abcdefg', 0, 3);
substring
-----------
(1 row)
SUBSTRING_INDEX
SUBSTRING_INDEX(str, delim, count)
描述:使用分隔符delim和次数count确定字符串str中最终分隔符的位置,返回分最终隔符左侧(或右侧)的全部字符。匹配分隔符delim时区分大小写。
- 如果count为正数,从字符串的左侧开始计数,直到delim出现了count次,返回最终分隔符左侧的全部字符。
- 如果count为负数,从字符串的右侧开始计数,直到delim出现了|count|次,返回最终分隔符右侧的全部字符。
- 如果任意一个参数为NULL,返回NULL。
- 如果str或delim为空字符串,返回空字符串
- 如果count等于0,返回空字符串。
参数:参数具体说明见下表。
|
参数 |
类型 |
描述 |
|---|---|---|
|
str |
TEXT |
待被截取的字符串 |
|
delim |
TEXT |
分隔符 |
|
count |
INT |
分隔符出现的次数 |
返回值类型:TEXT/BLOB
示例:
m_db=# SELECT SUBSTRING_INDEX('abc..def..ghi..jkl....', '..', 3);
substring_index
-----------------
abc..def..ghi
(1 row)
m_db=# SELECT SUBSTRING_INDEX('abc..def..ghi..jkl....', '..', -3);
substring_index
-----------------
jkl....
(1 row)
m_db=# SELECT SUBSTRING_INDEX('abc..def..ghi..jkl....', '..', NULL);
substring_index
-----------------
(1 row)
m_db=# SELECT SUBSTRING_INDEX('abc..def..ghi..jkl....', '..' ,0);
substring_index
-----------------
(1 row)
TO_BASE64
TO_BASE64(TEXT str)
描述:将字符串转换为base-64编码形式,并将结果作为字符串返回。如果参数不为字符串,则在转换前,将其转换为字符串。返回值的长度受GUC参数max_allowed_packet的影响,最大取值为Min(max_allowed_packet, 1073741819)。
返回值类型:LONGTEXT
示例:
m_db=# SELECT TO_BASE64('Gauss');
to_base64
-----------
R2F1c3M=
(1 row)
TRIM
TRIM([[BOTH | LEADING | TRAILING] [remstr] FROM] str)
描述:删除字符串str中的所有前缀/后缀子字符串remstr,当任意一个参数为NULL时,返回NULL。匹配remstr时区分大小写。
- remstr:默认为空格。
- [BOTH | LEADING | TRAILING]:
- BOTH:删除前缀和后缀;
- LEADING:删除前缀;
- TRAILING:删除后缀;
- 默认为BOTH。
返回值类型:TEXT/BLOB
示例:
m_db=# SELECT TRIM(' abc ');
trim
------
abc
(1 row)
m_db=# SELECT TRIM(TRAILING FROM ' abc ');
trim
--------
abc
(1 row)
m_db=# SELECT TRIM(BOTH 'xyz' FROM 'xyzxyabcxyzxy');
trim
------------
xyabcxyzxy
(1 row)
UCASE
UCASE(str)
描述:将字符串中的小写字母转换为大写字母。UCASE的功能、用法和UPPER一致。
返回值类型:TEXT/BLOB
示例:
m_db=# SELECT UCASE('Hello,world!');
ucase
--------------
HELLO,WORLD!
(1 row)
UNCOMPRESS
UNCOMPRESS (LONGBLOB string_to_uncompress)
描述:对COMPRESS函数压缩的字符串进行解压。如果函数入参不是压缩值,结果返回NULL。
返回值类型:LONGBLOB
示例:
m_db=# SELECT UNCOMPRESS(COMPRESS('abcde'));
UNCOMPRESS(COMPRESS('abcde'))
-------------------------------
abcde
(1 row)
UNCOMPRESSED_LENGTH
UNCOMPRESSED_LENGTH(LONGBLOB compressed_string)
描述:返回压缩字符串在压缩之前的长度。
返回值类型:INT
示例:
m_db=# SELECT UNCOMPRESSED_LENGTH(COMPRESS('abcde'));
UNCOMPRESSED_LENGTH(COMPRESS('abcde'))
----------------------------------------
5
(1 row)
UNHEX
UNHEX(str)
描述:将字符串str中的每个字符解释为十六进制数字,将其转换为该数字表示的字节,返回二进制字符串,其逆运算为HEX(str)。str中的字符必须是合法的十六进制数字,如果参数包含任何非法的数字,则返回NULL。
返回值类型:LONGBLOB
示例:
m_db=# SELECT UNHEX(616263), HEX(UNHEX('616263'));
unhex | hex
-------+--------
abc | 616263
(1 row)
UPPER
UPPER(str)
描述:将字符串中的小写字母转换为大写字母。UPPER的功能、用法和UCASE一致。
返回值类型:TEXT/BLOB
示例:
m_db=# SELECT UPPER('Hello,world!');
upper
--------------
HELLO,WORLD!
(1 row)