3、字符串函数



三、字符串函数

0、概述

分类函数功能
字符编码ASCII返回字符串的第一个字符的ASCII码。
字符编码CHR将指定ASCII码转换成字符。
字符编码ENCODE将字符串按照指定编码格式编码。
字符编码DECODE将字符串按照指定编码格式解码。
字符编码URL_ENCODE将字符串编码为application/x-www-form-urlencoded MIME格式。
字符编码URL_DECODE将字符串从application/x-www-form-urlencoded MIME格式转换为常规字符。
字符编码FROM_CHARSET将指定编码格式的二进制数据转换为UTF-8格式的字符串。
字符编码IS_ENCODING判断字符串是否可以从指定的A字符集转换为B字符集。
字符串拼接与重复CONCAT将字符串连接在一起。
字符串拼接与重复CONCAT_WS将参数中的所有字符串按照指定的分隔符连接在一起。
字符串拼接与重复REPEAT返回将字符串重复指定次数后的结果。
字符串长度与位置LENGTH计算字符串的长度。
字符串长度与位置LENGTHB计算字符串以字节为单位的长度。
字符串长度与位置INSTR计算A字符串在B字符串中的位置。
字符串长度与位置LOCATE在字符串中查找另一指定字符串的位置。
字符串长度与位置FIND_IN_SET在以逗号分隔的字符串中查找指定字符串的位置。
字符串截取与拆分SUBSTR返回STRING类型字符串从指定位置开始,指定长度的子串。
字符串截取与拆分SUBSTRING返回STRING或BINARY类型字符串从指定位置开始,指定长度的子串。
字符串截取与拆分SUBSTRING_INDEX截取字符串指定分隔符之前或之后的字符串。
字符串截取与拆分SPLIT按照分隔符分割字符串后返回数组。
字符串截取与拆分SPLIT_PART按照分隔符拆分字符串,返回指定部分的子串。
字符串替换与变换REPLACE将字符串中与指定字符串匹配的子串替换为另一字符串。
字符串替换与变换TRANSLATE将A出现在B中的字符串替换为C字符串。
字符串清洗与格式化TRIM去除字符串的左右两端字符。
字符串清洗与格式化LTRIM去除字符串的左端字符。
字符串清洗与格式化RTRIM去除字符串的右端字符。
字符串清洗与格式化LPAD将字符串向左补足到指定位数。
字符串清洗与格式化RPAD将字符串向右补足到指定位数。
字符串清洗与格式化INITCAP将字符串转换为固定格式的字符串,单词之间以空格分隔。转换后的格式为:字符串中每个单词首字母大写,其余小写。
字符串清洗与格式化TOLOWER将字符串中的英文字符转换为小写形式。
字符串清洗与格式化TOUPPER将字符串中的英文字符转换为大写形式。
字符串清洗与格式化FORMAT_NUMBER将数字转化为指定格式的字符串。
字符串清洗与格式化TO_CHAR将BOOLEAN、BIGINT、DECIMAL或DOUBLE类型值转为对应的STRING类型表示。
正则表达式REGEXP_COUNT计算字符串从指定位置开始,匹配指定规则的子串数。
正则表达式REGEXP_EXTRACT将字符串按照指定规则拆分为组后,返回指定组的字符串。
正则表达式REGEXP_EXTRACT_ALL在字符串中查找所有出现的正则表达式匹配的子字符串,并把找到的字符串以数组形式返回。
正则表达式REGEXP_INSTR返回字符串从指定位置开始,与指定规则匹配指定次数的子串的起始或结束位置。
正则表达式REGEXP_REPLACE将字符串中,与指定规则在指定次数匹配的子串替换为另一字符串。
正则表达式REGEXP_SUBSTR返回字符串中,从指定位置开始,与指定规则匹配指定次数的子串。
哈希与加密MASK_HASH返回基于字符串表达式计算的Hash值。
哈希与加密MD5计算字符串的MD5值。
URL解析PARSE_URL对URL进行解析返回指定部分的信息。
URL解析PARSE_URL_TUPLE对URL进行解析返回多个部分的信息。
JSON处理FROM_JSON根据给定的JSON字符串和输出格式信息,返回ARRAY、MAP或STRUCT类型。
JSON处理TO_JSON将指定的复杂类型输出为JSON字符串。
JSON处理GET_JSON_OBJECT在一个标准JSON字符串中,按照指定方式抽取指定的字符串。
JSON处理JSON_TUPLE在一个标准的JSON字符串中,按照输入的一组键抽取各个键指定的字符串。
键值处理KEYVALUE将字符串拆分为Key-Value对,并将Key-Value对分开,返回Key对应的Value。
键值处理KEYVALUE_TUPLE将字符串拆分为多个Key-Value对,并将Key-Value对分开,返回多个Key对应的Value。
其它SOUNDEX将普通字符串替换为SOUNDEX字符串。
其它CHAR_MATCHCOUNT计算A字符串出现在B字符串中的字符个数。
其它REVERSE返回倒序字符串。
其它SPACE生成空格字符串。

1、字符编码

  • ASCII:返回字符串的第一个字符的ASCII码。
bigint ascii(string <str>)
-- 97
SELECT ASCII('abcde');
-- NULL
SELECT ASCII(NULL);
  • CHR:将指定ASCII码转换成字符。
string chr(bigint <ascii>)
-- d
SELECT CHR(100);
-- NULL
SELECT CHR(NULL);
  • ENCODE:将字符串按照指定编码格式编码。
    • str:必填。STRING类型。待重新编码的字符串。
    • charset:必填。STRING类型。编码格式。取值范围为:UTF-8、UTF-16、UTF-16LE、UTF-16BE、ISO-8859-1、US-ASCII。
binary encode(string <str>, string <charset>)
-- abc
SELECT ENCODE('abc','UTF-8');
-- =00a=00b=00c
SELECT ENCODE('abc','UTF-16BE');
-- NULL
SELECT ENCODE('abc',NULL);
  • DECODE:将字符串按照指定编码格式解码。
参数是否必填说明
strBINARY类型,是待解码的字符串。
charsetSTRING类型,编码格式。取值范围为:UTF-8、UTF-16、UTF-16LE、UTF-16BE、ISO-8859-1、US-ASCII。说明目前ISO-8859-1和US-ASCII编码格式只支持对英文进行编码或解码,暂不支持中文。
STRING DECODE(BINARY <str>, STRING <charset>)
-- 中文样例
SELECT DECODE(ENCODE('中文样例','UTF-8'),'UTF-8');
-- NULL 
SELECT DECODE(ENCODE('中文样例','UTF-8'),NULL);
  • URL_ENCODE:加密。将字符串编码为application/x-www-form-urlencodedMIME格式。
string url_encode(string <input>[, string <encoding>])
-- https%3A%2F%2F%E5%BC%A0%E4%B8%89.com
SELECT URL_ENCODE('https://张三.com');

  • URL_DECODE:解密。将字符串从application/x-www-form-urlencodedMIME格式转换为常规字符。
string url_decode(string <input>[, string <encoding>])
-- https://张三.com
SELECT URL_DECODE(URL_ENCODE('https://张三.com'));
  • FROM_CHARSET:将指定编码格式的二进制数据转换为UTF-8格式的字符串。
STRING FROM_CHARSET(binary <source>, string <source_charset>, [string <mode>])
  • 入参:
    • source:必填,BINARY类型,待转换的二进制(Bytes)数据。
    • source_charset:必填,STRING类型,source参数原本的二进制数据编码格式。取值范围为:UTF-8UTF-16UTF-16LEUTF-16BEISO-8859-1US-ASCIIGB2312GBKGB18030
    • mode:可选,STRING类型,将source的二进制(Bytes)数据转换成指定编码格式字符串时,若遇到无法对应的字符时,采取的处理模式。取值说明如下:
      • NONE(默认值):不做任何处理,提示报错。
      • TRANSLIT:使用指定编码格式中类似的字符替换。
      • IGNORE:忽略报错的内容,然后继续完成命令。
-- 加油锟斤拷
SELECT FROM_CHARSET(unhex('e58aa0e6b2b9e9949fe696a4e68bb70a'),'UTF-8', 'TRANSLIT');
-- 哈哈好の
SELECT FROM_CHARSET(unhex('b9feb9febac3a4ce'), 'GBK');
  • IS_ENCODING:判断字符串是否可以从指定的A字符集转换为B字符集。
boolean is_encoding(string <str>, string <from_encoding>, string <to_encoding>)
--返回true。
select is_encoding('测试', 'utf-8', 'gbk');
--返回true。
select is_encoding('測試', 'utf-8', 'gbk');

--GB2312字库中不包括这两个字,返回false。
select is_encoding('測試', 'utf-8', 'gb2312');

2、字符串拼接与重复

  • CONCAT:将字符串连接在一起。
    • 输入为ARRAY数组:将多个ARRAY数组中的所有元素连接在一起,生成一个新的ARRAY数组。
    • 输入为字符串:将多个字符串连接在一起,生成一个新的字符串。
array<T> concat(array<T> <a>, array<T> <b>[,...])
string concat(string <str1>, string <str2>[,...])
-- [10, 20, 100, 200]
SELECT CONCAT(ARRAY(10,20), ARRAY (100,200));
-- [10, null, 100, 200]
SELECT CONCAT(ARRAY (10,NULL), ARRAY (100,200) );
-- NULL
SELECT CONCAT(ARRAY(10,20),NULL );
-- abcd1234
SELECT CONCAT('abcd','1234');
-- NULL
SELECT CONCAT('abcd',NULL);
  • CONCAT_WS:将参数中的所有字符串按照指定的分隔符连接在一起。
string concat_ws(string <separator>, string <str1>, string <str2>[,...])
string concat_ws(string <separator>, array<string> <a>)
-- 123,abc,0011
SELECT CONCAT_WS(',','123','abc','0011');
-- NULL
SELECT CONCAT_WS(',','123',NULL ,'0011');
-- 123,abc,1a2b3c4d
SELECT CONCAT_WS(',', ARRAY(123,'abc','1a2b3c4d'));
  • REPEAT:返回将str重复n次后的字符串。
string repeat(string <str>, bigint <n>)
--返回abcabcabcabcabc。
select repeat('abc', 5);

3、字符串长度与位置

  • LENGTH:计算字符串的长度。
bigint length(string <str>)
--返回15。
select length('Tech on the net');
-- 2
select LENGTH('张三');
-- NULL
SELECT LENGTH(NULL);
-- 2
SELECT LENGTH(19);
  • LENGTHB:计算字符串以字节为单位的长度。
bigint lengthb(string <str>)
--返回15。
select LENGTHB('Tech on the net');
-- 6
select LENGTHB('张三');
-- NULL
SELECT LENGTHB(NULL);
-- 2
SELECT LENGTHB(19);
  • INSTR:计算A字符串在B字符串中的位置。
bigint instr(string <str1>
             , string <str2>
             [, bigint <start_position>
              [, bigint <nth_appearance>]])
  • 参数
    • str1:必填。STRING类型。待搜索的目标字符串。
    • str2:必填。STRING类型。待匹配的子串。
    • start_position:可选。BIGINT类型。表示从str1的第几个字符开始搜索,默认起始位置是第一个字符位置1。
    • nth_appearance:可选。BIGINT类型,大于0。表示str2在str1中第nth_appearance次匹配的位置。
-- 1
SELECT INSTR('Tech on my stl','T');
-- 13
SELECT INSTR('Tech on my stl','t');
--返回6。
select instr('Tech on the net', 'on');
--返回14。
select instr('Tech on the net', 'e', 3, 2);
--返回NULL。
select instr('Tech on the net', null);
  • LOCATE:在字符串中查找另一指定字符串的位置。
bigint locate(string <substr>, string <str>[, bigint <start_pos>]) 
  • 入参
    • substr:必填。STRING类型。待查找的字符串。
    • str:必填。STRING类型。待匹配的字符串。
    • start_pos:可选。BIGINT类型。指定查找的起始位置。
--返回1。
select locate('ab', 'abchelloabc');
-- 6
SELECT LOCATE('T','dteteT');
--返回0。
select locate('hi', 'abc,hello,ab,c');
--返回0。
select locate('ab', 'abhelloabc', null);
  • FIND_IN_SET:在以逗号分隔的字符串中查找指定字符串的位置。
BIGINT FIND_IN_SET(STRING <str1>, STRING <str2>[, STRING <delimiter>])
-- 2(以,切分的<ab1,ab2,ab3,ad4>,<ab2>在数组中的位置)
SELECT find_in_set('ab2','ab1,ab2,ab3,ad4')
-- 3(以_切分的<ab1_ab2_ab3_ad4>,<ab3>在数组中的位置)
SELECT find_in_set('ab3','ab1_ab2_ab3_ad4','_');

4、字符串截取与拆分

  • SUBSTR:返回STRING类型字符串从指定位置开始,指定长度的子串。
string substr(string <str>, bigint <start_position>[, bigint <length>])
  • 入参:
    • str:必填。STRING类型。匹配的字符串
    • start_position:必填。BIGINT类型,默认起始位置为1。
    • length:可选。BIGINT类型,表示子串的长度值。值必须大于0。
--返回bc。
select substr('abc', 2);
--返回b。
select substr('abc', 2, 1);
--返回bc。
select substr('abc',-2 , 2);
-- NULL 
select substr('abc', NULL );
  • SUBSTRING:返回STRING或BINARY类型字符串从指定位置开始,指定长度的子串。
string substring(string|binary <str>, int <start_position>[, int <length>])
  • 入参:
    • str:必填。STRING或BINARY类型。
    • start_position:必填。INT类型,起始位置为1。
      • 当start_position为0时,返回空串。
      • 当start_position为负数时,表示开始位置是从字符串的结尾往前倒数,最后一个字符是-1,依次往前倒数。
    • length:可选。BIGINT类型,表示子串的长度值。值必须大于0。
--返回bc。
select substring('abc', 2);
--返回b。
select substring('abc', 2, 1);
--返回bc。
select substring('abc',-2,2);
--返回ab。
select substring('abc',-3,2);
--返回001。
select substring(bin(2345), 2, 3);
  • SUBSTRING_INDEX:截取字符串指定分隔符之前或之后的字符串。
string substring_index(string <str>, string <separator>, int <count>)
  • 入参:
    • str:必填。STRING类型。待截取的字符串。
    • separator:必填。STRING类型的分隔符。
    • count:必填。INT类型。指定分隔符位置
-- www
select SUBSTRING_INDEX('www.baidu.com','.',1);
-- www.baidu
select SUBSTRING_INDEX('www.baidu.com','.',2);
-- www.baidu.com
select SUBSTRING_INDEX('www.baidu.com','.',3);
-- NULL
select SUBSTRING_INDEX('www.baidu.com',NULL,2);
  • SPLIT:按照分隔符分割字符串后返回数组。
split(<str>, <pat>, [<trimTailEmpty>])
  • 入参
    • str:必填。STRING类型,表示待分割的原始字符串。
    • pat:必填。STRING类型的分隔符,支持正则表达式语法。
    • trimTailEmpty: 可选参数,默认值为true,设置为false时保留末尾空字符串 (Hive兼容)。
-- [a, b, c]
SELECT split("a,b,c",",");
-- [a, b, , c]
SELECT split("a,b,,c",",");
-- 末尾有空字符串
-- [a, b]
SELECT split("a,b,,",",");
-- [a, b, , ]
SELECT split("a,b,,",",",false);
  • SPLIT_PART:按照分隔符拆分字符串,返回指定部分的子串。
string split_part(string <str>, string <separator>, bigint <start>[, bigint <end>])
  • 入参
    • str:必填。STRING类型。待拆分的字符串。
    • separator:必填。STRING类型常量。拆分用的分隔符,可以是一个字符,也可以是一个字符串。
    • start:必填。BIGINT类型常量,必须大于0。表示返回段的开始编号(从1开始)。
    • end:BIGINT类型常量,大于等于start。表示返回段的截止编号,可省略,缺省时表示和start取值相等,返回start指定的段。
-- 依照分隔符,拆分字符串a,b,c,d,返回指定部分的子串。
-- a
select split_part('a,b,c,d', ',', 1);
-- a,b
select split_part('a,b,c,d', ',', 1, 2);

-- separator不存在于str中。
--返回a,b,c,d。
select split_part('a,b,c,d', ':', 1);
--返回空串。
select split_part('a,b,c,d', ':', 2);

5、字符串替换与变换

  • REPLACE:字符串替换。将字符串中与指定字符串匹配的子串替换为另一字符串。
string replace(string <str>, string <old>, string <new>)
-- abc0,abc1,====,abc3
SELECT REPLACE('abc0,abc1,abc2,abc3','abc2','====');
-- NULL
SELECT REPLACE('abc0,abc1,abc2,abc3',NULL ,'====');
  • TRANSLATE:将A出现在B中的字符串替换为C字符串。
string translate(string|varchar <str1>, string|varchar <str2>, string|varchar <str3>)
-- 111def
SELECT translate('abcdef','abc','111');
-- NULL
SELECT translate('abcdef','abc',NULL);

6、字符串清洗与格式化

  • TRIM:去除字符串的左右两端字符。
string trim(string <str>[,<trimChars>])
string trim([BOTH] [<trimChars>] from <str>)
  • 入参
    • str:必填。STRING类型。待去除左右两端字符的字符串。
    • trimChars:可选。String类型。待去除的字符。
-- mxx
select trim(' mxx ');

-- 只要存在xy中任意一个就去除,非xy的就停止
-- 1111()
select trim('yxy1111yxx', 'yx');
-- 1111
select trim('yx1111xx', 'xy');
-- yx1111
select trim('yx1111xx', 'x');
-- x1111xx
select trim('yx1111xx', 'y');

--返回NULL。
select trim(null);
  • LTRIM:去除字符串的左端字符。
string ltrim(string <str>[, <trimChars>])
string trim(leading [<trimChars>] from <str>)
-- yxTxyomxx 。
select ltrim(' yxTxyomxx ');
-- Txyomxx,只要左端遇到x或者y就会被去掉。
select ltrim('yxTxyomxx', 'xy');
-- NULL。
select ltrim(null);
  • RTRIM:去除字符串的右端字符。
string rtrim(string <str>[, <trimChars>])
string trim(trailing [<trimChars>] from <str>)
-- yxTxyomxx 。
select rtrim(' yxTxyomxx ');
-- Txyomxx,只要左端遇到x或者y就会被去掉。
select rtrim('yxTxyomxx', 'xy');
-- NULL。
select rtrim(null);
  • LPAD:将字符串向左补足到指定位数。
string lpad(string <str1>, int <length>, string <str2>)
  • 入参:
    • str1:必填。STRING类型。待向左补位的字符串。
    • length:必填。INT类型。补位后的目标位数。
    • str2:必填。用于补位的字符串。
-- 12abc
SELECT lpad('abc', 5, '12');
-- 1212abc
SELECT lpad('abc',7,'12');
-- NULL
SELECT lpad('abc',0,'12');
  • RPAD:将字符串向右补足到指定位数。
string rpad(string <str1>, int <length>, string <str2>)
  • 入参
    • str1:必填。STRING类型。待向右补位的字符串。
    • length:必填。INT类型。补位后的目标位数。
    • str2:必填。用于补位的字符串。
-- abc12
SELECT rpad('abc', 5, '12');
-- abc1212
SELECT rpad('abc',7,'12');
-- NULL
SELECT rpad('abc',0,'12');
  • INITCAP:将字符串转换为固定格式的字符串,单词之间以空格分隔。转换后的格式为:字符串中每个单词首字母大写,其余小写。
string initcap(<str>)
-- Odps Sql。
SELECT initcap("oDps sql");
  • TOLOWER:将字符串中的英文字符转换为小写形式。
string tolower(string <source>)
-- abcd中国12
SELECT tolower('aBcD中国12');
-- NULL
SELECT tolower(NULL);
  • TOUPPER:将字符串中的英文字符转换为大写形式。
string toupper(string <source>)
-- ABCD中国12
SELECT toupper('aBcD中国12');
-- NULL
SELECT toupper(NULL);
  • FORMAT_NUMBER:将数字转化为指定格式的字符串。
STRING FORMAT_NUMBER(DOUBLE|BIGINT|INT|SMALLINT|TINYINT|FLOAT|DECIMAL|STRING <expr1>, INT <expr2>)
  • 入参:
    • expr1:必填。需要格式化的数据。
    • expr2:必填。INT类型,取值范围为0~340。指代需要保留的小数位数。也可以为类似#,###,###.##格式的描述。
--返回5.230。
SELECT FORMAT_NUMBER(5.230134,3);
--返回12,332.123。
SELECT FORMAT_NUMBER(12332.123456, '#,###,###,###.###');
--返回NULL。
SELECT FORMAT_NUMBER(NULL,3);
  • TO_CHAR:将BOOLEAN、BIGINT、DECIMAL或DOUBLE类型值转为对应的STRING类型表示。
STRING TO_CHAR(BOOLEAN|BIGINT|DOUBLE|DECIMAL <value>)
-- 123
SELECT to_char(123);
-- NULL
SELECT to_char(NULL);

7、正则表达式

  • regexp:正则匹配
  • extract:提取

  • REGEXP_COUNT:计算字符串从指定位置开始,匹配指定规则的子串数。
bigint regexp_count(string <source>, string <pattern>[, bigint <start_position>])
  • 入参:
    • source:必填。STRING类型。待搜索的字符串,其他类型会返回报错。
    • pattern:必填。STRING类型常量或正则表达式。待匹配的模型。
    • start_position:可选。BIGINT类型常量,必须大于0。
-- 1(匹配a开头,c结尾,中间1个任意字符的字符串)
SELECT regexp_count('abcdef','a.c');
-- 0
SELECT regexp_count('abcdef','a.c');
-- NULL
SELECT REGEXP_COUNT('abcdef',NULL);
  • REGEXP_EXTRACT:将字符串按照指定规则拆分为组后,返回指定组的字符串。
    • 将字符串source按照pattern的分组规则进行字符串匹配,返回第groupid个组匹配到的字符串内容。
string regexp_extract(string <source>, string <pattern>[, bigint <groupid>])
-- foothebar
select regexp_extract('foothebar', 'foo(.*?)(bar)', 0);
-- the
select regexp_extract('foothebar', 'foo(.*?)(bar)');
select regexp_extract('foothebar', 'foo(.*?)(bar)', 1);
-- bar
select regexp_extract('foothebar', 'foo(.*?)(bar)', 2);
  • REGEXP_EXTRACT_ALL:在字符串中查找所有出现的正则表达式匹配的子字符串,并把找到的字符串以数组形式返回。
array<T> regexp_extract_all(string <source>, string <pattern>[,bigint <group_id>])
-- [100, 300]
select regexp_extract_all('100-200,300-400','(\\d+)-(\\d+)');
select regexp_extract_all('100-200,300-400','(\\d+)-(\\d+)',1);
-- [200, 400]
select regexp_extract_all('100-200,300-400','(\\d+)-(\\d+)',2);
  • REGEXP_INSTR:返回字符串从指定位置开始,与指定规则匹配指定次数的子串的起始或结束位置。
bigint regexp_instr(string <source>, string <pattern>[,bigint <start_position>[, bigint <occurrence>[, bigint <return_option>]]])
-- 3
select regexp_instr('ilov.ewow.taobd', 'o[[:alpha:]]{1}', 1, 1);
-- 8
select regexp_instr('ilov.ewow.taobd', 'o[[:alpha:]]{1}', 1, 2);
-- 13
select regexp_instr('ilov.ewow.taobd', 'o[[:alpha:]]{1}', 1, 3);
-- NULL 
select regexp_instr('ilov.ewow.taobd', NULL , 1, 3);
  • REGEXP_REPLACE:将字符串中,与指定规则在指定次数匹配的子串替换为另一字符串。
string regexp_replace(string <source>, string <pattern>, string <replace_string>[, bigint <occurrence>])
  • 入参:
    • source:必填。STRING类型,待替换的字符串。
    • pattern:必填。STRING类型常量或正则表达式。
    • replace_string:必填。STRING类型,将匹配pattern的字符串替换后的字符串。
-- 1bcd,1bcd,1bcd(替换全部)
SELECT regexp_replace('abcd,abcd,abcd','a','1',0);
-- 1bcd,abcd,abcd(替换1个)
SELECT regexp_replace('abcd,abcd,abcd','a','1',1);
-- NULL
SELECT regexp_replace('abcd,abcd,abcd',NULL,'1',1);
-- abc=,abc=,abc=(将数字替换为=)
SELECT regexp_replace('abc1,abc2,abc3','[0-9]','=',0);
  • REGEXP_SUBSTR:字符串切分。返回字符串中,从指定位置开始,与指定规则匹配指定次数的子串。
string regexp_substr(string <source>, string <pattern>[, bigint <start_position>[, bigint <occurrence>]])
  • 入参:
    • source:必填。STRING类型。待搜索的字符串。
    • pattern:必填。STRING类型常量或正则表达式。
    • start_position:可选。其他BIGINT常量,必须大于0。不指定时默认为1,表示从source的第一个字符开始匹配。
    • occurrence:可选。BIGINT常量,必须大于0。不指定时默认为1,表示返回第一次匹配的子串。
-- 0
SELECT regexp_substr('abc0,abc1,abc2','[0-9]');
-- 0(待匹配字符串。正则表达式。起始索引。第几个结果)
SELECT regexp_substr('abc0,abc1,abc2','[0-9]',1,1);
-- 1
SELECT regexp_substr('abc0,abc1,abc2','[0-9]',1,2);
-- 2
SELECT regexp_substr('abc0,abc1,abc2','[0-9]',1,3);
-- NULL
SELECT regexp_substr('abc0,abc1,abc2',NULL,1,3);

8、哈希与加密

  • MASK_HASH:返回基于字符串表达式计算的Hash值。
mask_hash(<expr>)
-- ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad
SELECT mask_hash('abc');
-- NULL
SELECT mask_hash(123);
-- NULL 
SELECT mask_hash(NULL);
  • MD5:计算字符串的MD5值。
string md5(string <str>)
-- 900150983cd24fb0d6963f7d28e17f72
SELECT md5('abc');
-- 202cb962ac59075b964b07152d234b70
SELECT md5(123);
-- NULL 
SELECT md5(NULL);

9、URL解析

  • PARSE_URL:对URL进行解析返回指定部分的信息。
string parse_url(string <url>, string <part>[, string <key>])
--返回example.com。
select parse_url('file://username:password@example.com:8042/over/there/index.dtb?type=animal&name=narwhal#nose', 'HOST');
--返回/over/there/index.dtb。
select parse_url('file://username:password@example.com:8042/over/there/index.dtb?type=animal&name=narwhal#nose', 'PATH');
--返回animal。
select parse_url('file://username:password@example.com:8042/over/there/index.dtb?type=animal&name=narwhal#nose', 'QUERY', 'type');
--返回nose。
select parse_url('file://username:password@example.com:8042/over/there/index.dtb?type=animal&name=narwhal#nose', 'REF');
--返回file。
select parse_url('file://username:password@example.com:8042/over/there/index.dtb?type=animal&name=narwhal#nose', 'PROTOCOL');
--返回 username:password@example.com:8042。
select parse_url('file://username:password@example.com:8042/over/there/index.dtb?type=animal&name=narwhal#nose', 'AUTHORITY');
--返回username:password。
select parse_url('file://username:password@example.com:8042/over/there/index.dtb?type=animal&name=narwhal#nose', 'USERINFO');

  • PARSE_URL_TUPLE:对URL进行解析返回多个部分的信息。
string parse_url_tuple(string <url>, string <key1>, string <key2>,...)
  • url:必填。STRING类型。URL链接。无效URL链接会返回报错。
  • key1key2:必填。STRING类型。指定要抽取的键。取值范围如下:
    • HOST:获取主机地址,可以为域名或IP地址。
    • PATH:获取网络资源在服务器中的路径。
    • QUERY:查询字符串,指代待查询的内容。
    • REF:获取URL注释。鼠标悬停至URL链接上时显示的内容。
    • PROTOCOL:获取协议类型。
    • AUTHORITY:获取服务器的域名或IP地址、端口号和用户鉴权信息(例如用户名、密码)。
    • FILE:获取网络资源在服务器中的路径和待查询的内容,即由PATH和QUERY组成。
    • USERINFO:用户鉴权信息。
    • QUERY:<KEY>:获取查询字符串中指定字段(Key)的取值。
  • 不区分大小写。不在该范围内的取值会返回报错
select parse_url_tuple('file://username:password@example.com:8042/over/there/index.dtb?type=animal&name=narwhal#nose', 'HOST', 'PATH', 'QUERY', 'REF', 'PROTOCOL', 'AUTHORITY', 'FILE', 'USERINFO', 'QUERY:type', 'QUERY:name') as (item0, item1, item2, item3, item4, item5, item6, item7, item8, item9);

10、JSON处理

  • FROM_JSON:根据给定的JSON字符串和输出格式信息,返回ARRAY、MAP或STRUCT类型。
from_json(<jsonStr>, <schema>)
--返回{a:1,b:0.8}。
select from_json('{"a":1, "b":0.8}', 'a int, b double');
  • TO_JSON:将指定的复杂类型输出为JSON字符串。
STRING TO_JSON(<expr>)
-- {"a":1}。
SELECT TO_JSON(MAP('a', 1));
  • GET_JSON_OBJECT:在一个标准JSON字符串中,按照指定方式抽取指定的字符串。
STRING GET_JSON_OBJECT(JSON <json>, STRING <json_path>)
-- 1
SELECT GET_JSON_OBJECT(JSON '{"a":1, "b":2}', '$.a');
  • JSON_TUPLE:在一个标准的JSON字符串中,按照输入的一组键抽取各个键指定的字符串。
string json_tuple(string <json>, string <key1>, string <key2>,...)
-- 湖畔大学 杭州
select json_tuple("{\"school\": \"湖畔大学\", \"address\":\"杭州\"}"
    ,"school","address") as (item0, item1);

11、键值处理

  • KEYVALUE:将字符串拆分为Key-Value对,并将Key-Value对分开,返回Key对应的Value。
KEYVALUE(STRING <str>, [STRING <split1>, STRING <split2>,] STRING <key>)
KEYVALUE(STRING <str>, STRING <key>) 
参数是否必填说明
strSTRING类型。待拆分的字符串。
split1、split2STRING类型。用于作为分隔符的字符串,按照指定的两个分隔符拆分源字符串。如果表达式中没有指定这两项,默认split1";"split2":"。当某个被split1拆分后的字符串中有多个split2时,返回结果未定义。
keySTRING类型。将字符串按照split1split2拆分后,返回key值对应的Value。
-- 1
SELECT KEYVALUE('0:1\;1:2', 0);
-- 2
SELECT KEYVALUE('0:1\;1:2', 1);

-- 18
SELECT KEYVALUE('age:18;genda:f;address:北京',';',':','age');
-- 北京
SELECT KEYVALUE('age:18;genda:f;address:北京',';',':','address');
-- 18   北京
SELECT KEYVALUE_TUPLE('age:18;genda:f;address:北京',';',':','age','address')
  • KEYVALUE_TUPLE:将字符串拆分为多个Key-Value对,并将Key-Value对分开,返回多个Key对应的Value。
KEYVALUE_TUPLE(str, split1, split2, key1, key2, ..., keyN)
-- 18
SELECT KEYVALUE('age:18;genda:f;address:北京',';',':','age');
-- 北京
SELECT KEYVALUE('age:18;genda:f;address:北京',';',':','address');
-- 18   北京
SELECT KEYVALUE_TUPLE('age:18;genda:f;address:北京',';',':','age','address')

12、其它

  • SOUNDEX:将普通字符串替换为SOUNDEX字符串。
string soundex(string <str>)
-- H400
select soundex('hello');
-- NULL
select soundex(NULL);
  • CHAR_MATCHCOUNT:计算A字符串出现在B字符串中的字符个数。
bigint char_matchcount(string <str1>, string <str2>)
-- 1
SELECT CHAR_MATCHCOUNT('a','abcdefgh');
-- 3
SELECT CHAR_MATCHCOUNT('abc','abcdefgh');
-- NULL
SELECT CHAR_MATCHCOUNT(NULL,'abcdefgh');
  • REVERSE:返回倒序字符串。:
string|array reverse(string|array <value>)
-- il ma i
SELECT reverse('i am li');
-- [3, 2, 1]
SELECT reverse(array(1,2,3));
-- NULL
SELECT reverse(NULL);
  • SPACE:生成空格字符串。
string space(bigint <n>)
SELECT SPACE(10);
-- 10
SELECT LENGTH(SPACE(10));
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ha_lydms

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值