字符串函数(2.0版)
AnalyticDB for MySQL支持以下字符串函数。
CHR:返回Unicode编码对应的字符串。
CONCAT:连接字符串。
GROUP_CONCAT:通常与group by一起使用,用于将group by产生的同一个分组中的值连接起来,返回一个字符串结果。
LENGTH:返回字符串长度。
LOWER:将字符串转换为小写。
UPPER:将字符串转换为大写。
LPAD:左拼接字符串。
RPAD:右拼接字符串。
TRIM/LTRIM/RTRIM:删除字符串前后所有的空格/前导空格/后置空格。
REPLACE:删除字符串中的所有指定子串。
REVERSE:将字符串逆序。
SPLIT:将字符串按分隔符进行分隔,并返回数组。
POSITION:返回字符串中子字符串的第一次出现的起始位置。
CHAR:返回十进制数字对应的字符形成的字符串。
HEX:返回十六进制字符串。
INITCAP:将字符串首字符转换为大写。
INSTR:返回指定子串首次(或者指定次数)出现在字符串中的位置。
ASCII:返回字符或者字符串最左边字符对应的ASCII值。
MID:作用同SUBSTR/SUBSTRING。
REPEAT:返回字符串重复多次的字符串。
STRPOS:返回字符串中子字符串的第一次出现的起始位置。
SUBSTR/SUBSTRING:返回一个从指定位置开始的指定长度的子字符串。
TRANSLATE将字符表达式值中,指定字符替换为新字符。
CHR
chr(n)
命令说明:返回Unicode编码为n的字符。
返回值类型:VARCHAR。
示例:
SELECT Chr(65), Chr(66);
返回值如下:
+-------+-------+ | _col0 | _col1 | +-------+-------+ | A | B | +-------+-------+
CONCAT
concat(string1, …, stringN)
命令说明:字符串连接操作,与标准SQL的连接运算符
||
功能相同。返回值类型:VARCHAR。
示例:
SELECT Concat('aliyun', ', ', 'analyticdb')
返回值如下:
+--------------------------------------+ | _col0 | +--------------------------------------+ | aliyun, analyticdb | +--------------------------------------+
GROUP_CONCAT
group_concat([distinct] 要连接的字段)
命令说明:group_concat函数通常与group by一起使用,用于将group by产生的同一个分组中的值连接起来,返回一个字符串结果。通过使用distinct可以排除重复值。
返回值类型:VARCHAR。
示例:
SELECT * FROM user
返回值如下:
+-------------+ | id |username| +-------------+ | 4 | lucy | | 3 | Lucy | | 2 | lily | | 1 | lily | +-------------+
select group_concat(distinct username)from user GROUP BY 'username' ;
返回值如下:
+-----------------------+ | _col0 | +-----------------------+ | Lucy,Lily | +-----------------------+
LENGTH
length(string)
命令说明:返回字符串string的长度。
说明MySQL中一个中文字符length为3,分析型数据库MySQL版中为1。
返回值类型:BIGINT。
示例:
SELECT length('aliyun')
返回值如下:
+--------------------+ | _col0 | +--------------------+ | 6 | +--------------------+
LOWER
lower(string)
命令说明:将字符串string中的字母转换为小写。
返回值类型:VARCHAR。
示例:
SELECT lower('Aliyun');
返回值如下:
+--------------------+ | _col0 | +--------------------+ | aliyun | +--------------------+
UPPER
upper(string)
命令说明:将字符串string中的字母转换为大写。
返回值类型:VARCHAR。
示例:
SELECT upper('Aliyun');
返回值如下:
+-----------+ | _col0 | +-----------+ | ALIYUN | +-----------+
LPAD
lpad(string, size, padstring)
命令说明:
将字符串string左边拼接padstring直到长度达到size,并返回填充后的字符串。
如果size比string长度小,则截断。size不能为负数,padstring非空。
说明MySQL中一个中文字符length为3,分析型数据库MySQL版中为1。
返回值类型:VARCHAR。
示例:
SELECT Lpad('Aliyun',9,'#');
返回值如下:
+-----------+ | _col0 | +-----------+ | ###Aliyun | +-----------+
RPAD
rpad(string, size, padstring)
命令说明:
将字符串string右边拼接padstring直到长度达到size,并返回填充后的字符串。
如果size比string长度小,则截断。size不能为负数,padstring非空。
说明MySQL中一个中文字符length为3,分析型数据库MySQL版中为1。
返回值类型:VARCHAR。
示例:
SELECT rpad('Aliyun',9,'#');
返回值如下:
+--------------+ | _col0 | +--------------+ | Aliyun### | +--------------+
TRIM/LTRIM/RTRIM
trim(string)
ltrim(string)
rtrim(string)
命令说明:
trim(string)
:删除字符串string前后所有的空格。ltrim(string)
:删除字符串string所有前导空格。rtrim(string)
:删除字符串string所有后置空格。
返回值类型:VARCHAR。
示例:
SELECT Trim(' 135 544 '), Ltrim(' 135 544 '), Rtrim(' 135 544 ');
返回值如下:
+---------+-------------+------------+ | _col0 | _col1 | _col2 | +---------+-------------+------------+ | 135 544 | 135 544 | 135 544 | +---------+-------------+------------+
REPLACE
replace(string, search)
replace(string, search, replace)
命令说明:
replace(string, search)
:删除字符串string中的所有search子串。replace(string, search, replace)
:将字符串string中所有子串search替换为replace。
返回值类型:VARCHAR。
示例:
S SELECT REPLACE('helloworld', 'world'), REPLACE('helloworld', 'world', ' World!!!'), REPLACE('helloworld', 'notFound', ' World');
返回值如下:
+-------+----------------+------------+ | _col0 | _col1 | _col2 | +-------+----------------+------------+ | hello | hello World!!! | helloworld | +-------+----------------+------------+
REVERSE
reverse(string)
命令说明:返回string逆序后的字符串。
返回值类型:VARCHAR。
示例:
SELECT Reverse('123456'), Reverse(''), Reverse(Cast (NULL AS VARCHAR));
返回值如下:
+--------+-------+-------+ | _col0 | _col1 | _col2 | +--------+-------+-------+ | 654321 | | NULL | +--------+-------+-------+
SPLIT
split(string, delimiter)
split_part(string, delimiter, index)
split_to_map(string, entryDelimiter, keyValueDelimiter)
命令说明:
split(string, delimiter)
:将字符串string按分隔符delimiter进行分隔,并返回数组。split_part(string, delimiter, index)
:将字符串string按分隔符delimiter分隔,并返回分隔后数组下标为index的子串,index以1开头,如果大于字段数则返回null。split_to_map(string, entryDelimiter, keyValueDelimiter)
:通过entryDelimiter和keyValueDelimiter拆分字符串并返回map。entryDelimiter将字符串分解为key-value对,keyValueDelimiter将每对分隔成key、value。
返回值类型:VARCHAR或map<varchar, varchar>。
示例:
SELECT Split('1#2#3', '#'), Split('#1#2#3#', '#'), Split('123', '#');
返回值如下:
+-----------+---------------+-----------+ | _col0 | _col1 | _col2 | +-----------+---------------+-----------+ | [1, 2, 3] | [, 1, 2, 3, ] | [123] | +-----------+---------------+-----------+
SELECT Split_part('A#B#C', '#', 2), Split_part('A#B#C', '#', 4);
返回值如下:
+---------------------+-------------------------+ | _col0 | _col1 | +---------------------+-------------------------+ | B | NULL | +---------------------+-------------------------+
SELECT Split_to_map('k1:v1,k2:v2', ',', ':'), Split_to_map('', ',', ':');
返回值如下:
+---------------------+-------------------------+ | _col0 | _col1 | +---------------------+-------------------------+ | {k1=v1, k2=v2} | {} | +---------------------+-------------------------+
POSITION
position(substring IN string)
命令说明: 返回字符串中子字符串的第一次出现的起始位置,位置从1开始,如果未找到则返回0。
返回值类型:BIGINT。
示例:
SELECT position('o' IN 'helloworld'), position('or' IN'helloworld'), position('x' IN 'helloworld');
返回值如下:
+-------+-------+--------+ | _col0 | _col1 | _col2 | +-------+-------+--------+ | 5 | 7 | 0 | +-------+-------+--------+
CHAR
char(N,N,..)
命令说明: 返回每个数字代表的字符组成的字符串。
返回值类型:VARCHAR。
示例:
SELECT CHAR(97,110,97,108,121,116,105,99,100,98);
返回值如下:
+------------+ | _col0 | +------------+ | analyticdb | +------------+
HEX
hex(bigint)
命令说明:返回16进制字符串。
返回值类型:VARCHAR。
示例:
SELECT Hex(10), Hex(1234);
返回值如下:
+-------+-------+ | _col0 | _col1 | +-------+-------+ | a | 4d2 | +-------+-------+
INITCAP
initcap(string)
命令说明:输入字符串首字符转大写。
返回值类型:VARCHAR。
示例:
SELECT Initcap('the soap'), Initcap('the,soap'), Initcap('thesoap');
返回值如下:
+----------+----------+---------+ | _col0 | _col1 | _col2 | +----------+----------+---------+ | The Soap | The,Soap | Thesoap | +----------+----------+---------+
INSTR
instr(string, substring)
instr(string, substring, position)
instr(string, substring, position, occurrence)
命令说明:
instr(string, substring)
:返回string中匹配substring的第一个位置信息。instr(string, substring, position)
:从string字符的第position位置开始搜索,返回string中匹配substring的位置信息。instr(string, substring, position, occurrence)
:从string字符的第position位置开始搜索第occurrence次出现的位置,返回string中匹配substring的位置信息。返回值类型:BIGINT。
示例:
SELECT Instr('CORPORATE FLOOR', 'OR'), Instr('CORPORATE FLOOR', 'OR', 3), Instr('CORPORATE FLOOR', 'OR', 3, 2);
返回值如下:
+----------+----------+---------+ | _col0 | _col1 | _col2 | +----------+----------+---------+ | 2 | 5 | 14 | +----------+----------+---------+
ASCII
ASCII(string)
命令说明:返回字符或者字符串最左边字符对应的ASCII值。
返回值类型:BIGINT。
示例:
SELECT Ascii('d'), Ascii('dx'), Ascii('1');
返回值如下:
+-------+-------+-------+ | _col0 | _col1 | _col2 | +-------+-------+-------+ | 100 | 100 | 49 | +-------+-------+-------+
MID
MID(string, start, length)
命令说明:作用同substr(string, start, length)。
返回值类型:VARCHAR。
示例:
SELECT Mid('helloworld', 6, 3), Mid('helloworld', -6, 2);
返回值如下:
+-------+-------+ | _col0 | _col1 | +-------+-------+ | wor | ow | +-------+-------+
REPEAT
repeat(string,int)
命令说明:返回重复多次的字符串。
返回值类型:VARCHAR。
示例:
SELECT Repeat('a', 3), Repeat('xyz', 2), Repeat(Cast(NULL AS VARCHAR), 2);
返回值如下:
+-------+--------+-------+ | _col0 | _col1 | _col2 | +-------+--------+-------+ | aaa | xyzxyz | NULL | +-------+--------+-------+
STRPOS
strpos(string, substring)
命令说明:返回字符串中子字符串的第一次出现的起始位置,位置从1开始 ,如果未找到则返回0。
返回值类型:BIGINT。
示例:
SELECT Strpos('helloworld', 'o'), Strpos('helloworld', 'or'), Strpos('helloworld', 'x');
返回值如下:
+-------+-------+-------+ | _col0 | _col1 | _col2 | +-------+-------+-------+ | 5 | 7 | 0 | +-------+-------+-------+
SUBSTR/SUBSTRING
substr(string, start)
substr(string, start, length)
命令说明:
substr(string, start)
:返回从start位置开始到字符串结束的子串。位置从1开始,如果start为负数,则起始位置从字符串的末尾开始倒数。substr(string, start, length)
返回从start位置开始长度为length的子串,位置从1开始。如果start为负数,则起始位置从字符串的末尾开始倒数。说明MySQL中一个中文字符的length为3,分析型数据库MySQL版中为1。
返回值类型:VARCHAR。
示例:
SELECT Substr('helloworld', 6), Substr('helloworld', 6, 3), Substr('helloworld', -6), Substr('helloworld', -6, 2), Substring('helloworld', -6, 2);
返回值如下:
+-------+-------+--------+-------+-------+ | _col0 | _col1 | _col2 | _col3 | _col4 | +-------+-------+--------+-------+-------+ | world | wor | oworld | ow | ow | +-------+-------+--------+-------+-------+
TRANSLATE
translate(expr, from_string, to_string)
命令说明:将expr字符串中,符合from_string的字符,替换为to_string。
返回值类型:VARCHAR。
示例:
SELECT Translate('acbd', 'ab', 'AB'), Translate('acbdaa', 'ab', 'AB'), Translate('acbd', 'abc', 'A'), Translate('acbd', 'abc', '');
返回值如下:
+-------+--------+-------+-------+ | _col0 | _col1 | _col2 | _col3 | +-------+--------+-------+-------+ | AcBd | AcBdAA | Ad | d | +-------+--------+-------+-------+