字符串函数和运算符
字符串运算符
||表示字符连接
SELECT 'he'||'llo'; –hello
字符串函数
这些函数假定输入字符串包含有效的UTF-8编码的Unicode代码点。不会显式检查UTF-8数据是否有效,对于无效的UTF-8数据,函数可能会返回错误的结果。可以使用from_utf8来更正无效的UTF-8数据。
此外,这些函数对Unicode代码点进行运算,而不是对用户可见的字符(或字形群集)进行运算。某些语言将多个代码点组合成单个用户感观字符(这是语言书写系统的基本单位),但是函数会将每个代码点视为单独的单位。
lower和upper函数不执行某些语言所需的区域设置相关、上下文相关或一对多映射。
- char_length(string) → bigint
- character_length(string) → bigint
- codepoint(string) → integer
描述:返回单个字符对应的Unicode编码。
select codepoint('d'); --100
- concat(string1, string2) → varchar
select concat('hello','world'); -- helloworld
- concat_ws(string0, string1, ..., stringN) → varchar
描述:将string1、string2、...,stringN,以string0作为分隔符串联成一个字符串。如果string0为null,则返回值为null。分隔符后的参数如果是NULL值,将会被跳过。
select concat_ws(',','hello','world'); -- hello,world select concat_ws(NULL,'def'); --NULL select concat_ws(',','hello',NULL,'world'); -- hello,world select concat_ws(',','hello','','world'); -- hello,,world
- concat_ws(string0, array(varchar)) → varchar
描述:将数组中的元素以string0为分隔符进行串联。如果string0为null,则返回值为null。数组中的任何null值都将被跳过。
select concat_ws(NULL,ARRAY['abc']);--NULL select concat_ws(',',ARRAY['abc',NULL,NULL,'xyz']); -- abc,xyz select concat_ws(',',ARRAY['hello','world']); -- hello,world
- decode(binary bin, string charset) →varchar
描述:根据给定的字符集将第一个参数编码为字符串,支持的字符集包括('UTF-8', 'UTF-16BE', 'UTF-16LE', 'UTF-16'),当第一个参数为null,将返回null。
select decode(X'70 61 6e 64 61','UTF-8'); _col0 ------- panda (1 row) select decode(X'00 70 00 61 00 6e 00 64 00 61','UTF-16BE'); _col0 ------- panda (1 row)
- encode(string str, string charset) →binary
select encode('panda','UTF-8'); _col0 ---------------- 70 61 6e 64 61 (1 row)
- find_in_set (string str, string strList) →int
描述:返回str在逗号分隔的strList中第一次出现的位置。当有参数为null时,返回值也为null。
select find_in_set('ab', 'abc,b,ab,c,def'); -- 3
- format_number(number x, int d) →string
描述:将数字x格式化为'#,###,###.##',保留d位小数,以字符串的形式返回结果。
select format_number(541211.212,2); -- 541,211.21
- format(format,args...) → varchar
描述:参见Format。
- locate(string substr, string str, int pos]) →int
描述:返回子串在字符串的第pos位后第一次出现的位置。没有满足条件的返回0。
select locate('aaa','bbaaaaa',6);-- 0 select locate('aaa','bbaaaaa',1);-- 3 select locate('aaa','bbaaaaa',4);-- 4
- length(string) → bigint
select length('hello');-- 5
- levenshtein_distance(string1, string2) → bigint
描述:计算string1和string2的Levenshtein距离,即将string转为string2所需要的单字符编辑(包括插入、删除或替换)最少次数。
select levenshtein_distance('helo word','hello,world'); -- 3
- hamming_distance(string1, string2) → bigint
描述:返回字符串1和字符串2的汉明距离,即对应位置字符不同的数量。 请注意,两个字符串的长度必须相同。
select hamming_distance('abcde','edcba');-- 4
- instr(string,substring) → bigint
- levenshtein(string1, string2) → bigint 参考levenshtein_distance(string1, string2)
- levenshtein_distance(string1, string2) → bigint
描述:返回字符串1和字符串2的Levenshtein编辑距离,即将字符串1更改为字符串2所需的最小单字符编辑(插入,删除或替换)次数。
select levenshtein_distance('apple','epplea');-- 2
- lower(string) → varchar
select lower('HELLo!');-- hello!
- lcase(string A) → varchar
- luhn_check(string) → boolean
这种校验和函数,也称为模10,广泛应用于信用卡号码和身份证号码,以区分有效号码和键入错误、错误的号码。
select luhn_check('79927398713'); -- true select luhn_check('79927398714'); -- false
- octet_length(string str) → int
select octet_length('query');--5
- parse_url(string urlString, string partToExtract [, string keyToExtract]) →string
描述:返回URL的指定部分。partToExtract参数有效值包括:HOST、PATH、QUERY、REF、PROTOCOL、AUTHORITY、FILE和USERINFO。keyToExtract为可选参数,用于选取QUERY中的key对应的值。
select parse_url('https://www.example.com/index.html','HOST'); _col0 ---------- www.example.com (1 row) -- 查询URL中QUERY部分service对应的值 select parse_url('https://www.example.com/query/index.html?name=panda','QUERY','name'); _col0 ------- panda (1 row)
- position(substring IN string) →bigint
描述:返回子串在父串中第一次出现的位置
select position('ab' in 'sssababa');-- 4
- quote(String text) → string
select quote('DONT');-- 'DONT' select quote(NULL);-- NULL
- repeat2(string str, int n) → string
select repeat2('abc',4); _col0 -------------- abcabcabcabc (1 row)
- reverse(string) → varchar
select reverse('hello');-- olleh
- rpad(string, size, padstring) → varchar
描述:右填充字符串以使用padstring调整字符大小。如果size小于字符串的长度,则结果将被截断为size个字符。大小不能为负,并且填充字符串必须为非空。
select rpad('myk',5,'dog'); -- mykdo
- rtrim(string) → varchar
select rtrim('hello world! ');-- hello world!
- space(int n) → varchar
select space(4); _col0 ------- (1 row) select length(space(4)); _col0 ------- 4 (1 row)
- split(string, delimiter) → array
描述:将字符串按限定符(delimiter)分隔为一个array。
select split('a:b:c:d',':');-- [a, b, c, d]
- split(string, delimiter, limit) → array
描述:将字符串按delimiter分割为一个array,元素个数为limit。最后一个元素包含了最后一个字符串后面所有的字符。Limit 必须是个数字。
select split('a:b:c:d',':',2);-- [a, b:c:d] select split('a:b:c:d',':',4);-- [a, b, c, d]
- split_part(string, delimiter, index) → varchar
描述:将字符串按delimiter分隔为一个array,并取出索引值为index的元素。index从1开始,如果index超过了数组长度,则返回null。
select split_part('a:b:c:d',':',2); -- b select split_part('a:b:c:d',':',5); -- NULL
- split_to_map (string, entryDelimiter, keyValueDelimiter) → map<varchar, varchar>
描述:将字符串按entryDelimiter分割为Map的键值对,而每个键值对又按照keyValueDelimiter来区分Key和Value。
select split_to_map('li:18,wang:17',',',':');--{wang=17, li=18}
- split_to_multimap(string, entryDelimiter, keyValueDelimiter) -> map(varchar, array(varchar)
描述:将字符串按照entryDelimiter和keyValueDelimiter分割,返回一个map,每个key对应一个类型为array的value。其中,entryDelimiter将字符串分割为键值对,keyValueDelimiter将键值对分割为Key和Value。
select split_to_multimap('li:18,wang:17,li:19,wang:18',',',':');--{wang=[17, 18], li=[18, 19]}
- strpos(string, substring) → bigint
描述:返回字符串中第一次出现substring的位置。从1开始,如果未找到,返回0。举例:
select strpos('hello world!','l'); --3 select strpos('hello world!','da'); --0
- str_to_map() 参考split_to_map()
- substr(string, start, length) → varchar
描述:从start位置开始截取字符串,截取的长度为length。
一般用于截取时间戳格式。
Select substr('2019-03-10 10:00:00',1,10); --截取到日 2019-03-10 Select substr('2019-03-10 10:00:00',1,7); --截取到月 2019-03
- substring(string, start) → varchar
- substring_index(string A, string delim, int count) → varchar
描述:当count为正数时,返回从左边开始计数的第count个分隔符delim左边的所有内容。当count为负数时,返回从右边开始计数的第count个分隔符delim右侧的所有内容。
select substring_index('one.two.three','.',2); _col0 ----------------- one.two (1 row) select substring_index('one.two.three','.',-2); _col0 ----------------- two.three (1 row) select substring_index('one.two.three','.',0); _col0 ------- NULL (1 row)
- soundex(string A) →varchar
描述:SOUNDEX返回由四个字符组成的代码(SOUNDEX)以评估两个字符串在发音时的相似性。规则如下:
表1 字符对应规则 字符
对应数字
a、e、h、i、o、u、w、y
0
b、f、p、v
1
c、g、j、k、q、s、x、z
2
d、t
3
l
4
m、n
5
r
6
- 提取字符串的首字母作为soundex的第一个值。
- 按照上面的字母对应规则,将后面的字母逐个替换为数字。如果有连续的相等的数字,只保留一个,其余的都删除掉,并去除所有的0。
- 如果结果超过4位,取前四位。如果结果不足4位向后补0。
select soundex('Miller'); _col0 ------- M460 (1 row)
- translate(string|char|varchar input, string|char|varchar from, string|char|varchar to) →varchar
描述:对于input字符串,将其中的参数from指代字符串替换为参数to指代的字符串。三个参数有一个为NULL,则结果返回NULL。
select translate('aabbcc','bb','BB'); _col0 -------- aaBBcc (1 row)
- upper(string) → varchar
select upper('heLLo');-- HELLO
- ucase(string A) → varchar
- base64decode(STRING str)
SELECT to_base64(CAST('hello world' as varbinary));-- aGVsbG8gd29ybGQ= select base64decode('aGVsbG8gd29ybGQ=');-- hello world
- jaro_distance(STRING str1, STRING str2)
select JARO_DISTANCE('hello', 'hell');-- 0.9333333333333332
- FNV_HASH(type v)
select FNV_HASH('hello');-- -6615550055289275125
- word_stem(word) → varchar
select word_stem('greating');-- great
- word_stem(word, lang) → varchar
描述:返回指定语种单词中的词干。
select word_stem('ultramoderne','fr');-- ultramodern
- translate(source, from, to) → varchar
描述:通过将源字符串中找到的字符替换为目标字符串中的相应字符来返回翻译后的源字符串。如果from字符串包含重复项,则仅使用第一个。如果源字符在from字符串中不存在,则将复制源字符而不进行翻译。如果在from字符串中匹配字符的索引超出了to字符串的长度,则将从结果字符串中省略源字符。
SELECT translate('abcd', '', ''); -- 'abcd' SELECT translate('abcd', 'a', 'z'); -- 'zbcd' SELECT translate('abcda', 'a', 'z'); -- 'zbcdz' SELECT translate('Palhoça', 'ç','c'); -- 'Palhoca' SELECT translate('abcd', 'a', ''); -- 'bcd' SELECT translate('abcd', 'a', 'zy'); -- 'zbcd' SELECT translate('abcd', 'ac', 'z'); -- 'zbd' SELECT translate('abcd', 'aac', 'zq'); -- 'zbd'
- normalize(string) → varchar
select normalize('e'); _col0 ------- e (1 row)
- normalize(string, form) → varchar
描述:Unicode允许你用不同的字节来写相同的字符,例如é和é,第一个是由0xC3 0xA9这两个字节组成的,第二个是由0x65 0xCC 0x81这三个字节组成的。
normalize()将根据参数form给定的Unicode规范化形式 (包括NFC、NFD、NFKC、NFKD)返回标准字符串,如未指定参数,默认使用NFC。
select to_utf8('é'); _col0 ------- c3 a9 (1 row) select to_utf8('é'); _col0 ---------- 65 cc 81 (1 row) select normalize('é',NFC)=normalize('é',NFC); _col0 ------- true (1 row)
- to_utf8(string) → varbinary
select to_utf8('panda'); _col0 ---------------- 70 61 6e 64 61 (1 row)
- from_utf8(binary) → varchar
描述:将一个二进制串编码为UTF-8格式字符串。无效的UTF-8序列将被Unicode字符U+FFFD替换。
select from_utf8(X'70 61 6e 64 61'); _col0 ------- panda (1 row)
- from_utf8(binary, replace) → varchar
描述:将一个二进制串编码为UTF-8格式字符串。无效的UTF-8序列将被参数replace替换。参数replace必须为单个字符或空(以免无效字符被移除)。
select from_utf8(X'70 61 6e 64 61 b1','!'); _col0 -------- panda! (1 row)