三、字符串函数
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> )
SELECT ASCII( 'abcde' ) ;
SELECT ASCII( NULL ) ;
string chr( bigint < ascii> )
SELECT CHR( 100 ) ;
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 > )
SELECT ENCODE( 'abc' , 'UTF-8' ) ;
SELECT ENCODE( 'abc' , 'UTF-16BE' ) ;
SELECT ENCODE( 'abc' , NULL ) ;
参数 是否必填 说明 str 是 BINARY类型,是待解码的字符串。 charset 是 STRING类型,编码格式。取值范围为: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' ) ;
SELECT DECODE( ENCODE( '中文样例' , 'UTF-8' ) , NULL ) ;
URL_ENCODE:加密。将字符串编码为application/x-www-form-urlencodedMIME格式。
string url_encode( string < input> [ , string < encoding> ] )
SELECT URL_ENCODE( 'https://张三.com' ) ;
URL_DECODE:解密。将字符串从application/x-www-form-urlencodedMIME格式转换为常规字符。
string url_decode( string < input> [ , string < encoding> ] )
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-8、UTF-16、UTF-16LE、UTF-16BE、ISO-8859-1、US-ASCII、GB2312、GBK和GB18030。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> )
select is_encoding( '测试' , 'utf-8' , 'gbk' ) ;
select is_encoding( '測試' , 'utf-8' , 'gbk' ) ;
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> [ , . . . ] )
SELECT CONCAT( ARRAY( 10 , 20 ) , ARRAY ( 100 , 200 ) ) ;
SELECT CONCAT( ARRAY ( 10 , NULL ) , ARRAY ( 100 , 200 ) ) ;
SELECT CONCAT( ARRAY( 10 , 20 ) , NULL ) ;
SELECT CONCAT( 'abcd' , '1234' ) ;
SELECT CONCAT( 'abcd' , NULL ) ;
CONCAT_WS:将参数中的所有字符串按照指定的分隔符连接在一起。
string concat_ws( string < separator> , string < str1> , string < str2> [ , . . . ] )
string concat_ws( string < separator> , array< string> < a> )
SELECT CONCAT_WS( ',' , '123' , 'abc' , '0011' ) ;
SELECT CONCAT_WS( ',' , '123' , NULL , '0011' ) ;
SELECT CONCAT_WS( ',' , ARRAY( 123 , 'abc' , '1a2b3c4d' ) ) ;
string repeat ( string < str> , bigint < n> )
select repeat ( 'abc' , 5 ) ;
3、字符串长度与位置
bigint length( string < str> )
select length( 'Tech on the net' ) ;
select LENGTH( '张三' ) ;
SELECT LENGTH( NULL ) ;
SELECT LENGTH( 19 ) ;
bigint lengthb( string < str> )
select LENGTHB( 'Tech on the net' ) ;
select LENGTHB( '张三' ) ;
SELECT LENGTHB( NULL ) ;
SELECT LENGTHB( 19 ) ;
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次匹配的位置。
SELECT INSTR( 'Tech on my stl' , 'T' ) ;
SELECT INSTR( 'Tech on my stl' , 't' ) ;
select instr( 'Tech on the net' , 'on' ) ;
select instr( 'Tech on the net' , 'e' , 3 , 2 ) ;
select instr( 'Tech on the net' , null ) ;
LOCATE:在字符串中查找另一指定字符串的位置。
bigint locate( string < substr> , string < str> [ , bigint < start_pos> ] )
入参
substr:必填。STRING类型。待查找的字符串。str:必填。STRING类型。待匹配的字符串。start_pos:可选。BIGINT类型。指定查找的起始位置。
select locate( 'ab' , 'abchelloabc' ) ;
SELECT LOCATE( 'T' , 'dteteT' ) ;
select locate( 'hi' , 'abc,hello,ab,c' ) ;
select locate( 'ab' , 'abhelloabc' , null ) ;
FIND_IN_SET:在以逗号分隔的字符串中查找指定字符串的位置。
BIGINT FIND_IN_SET( STRING < str1> , STRING < str2> [ , STRING < delimiter > ] )
SELECT find_in_set( 'ab2' , 'ab1,ab2,ab3,ad4' )
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。
select substr( 'abc' , 2 ) ;
select substr( 'abc' , 2 , 1 ) ;
select substr( 'abc' , - 2 , 2 ) ;
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。
select substring( 'abc' , 2 ) ;
select substring( 'abc' , 2 , 1 ) ;
select substring( 'abc' , - 2 , 2 ) ;
select substring( 'abc' , - 3 , 2 ) ;
select substring( bin( 2345 ) , 2 , 3 ) ;
SUBSTRING_INDEX:截取字符串指定分隔符之前或之后的字符串。
string substring_index( string < str> , string < separator> , int < count> )
入参:
str:必填。STRING类型。待截取的字符串。separator:必填。STRING类型的分隔符。count:必填。INT类型。指定分隔符位置
select SUBSTRING_INDEX( 'www.baidu.com' , '.' , 1 ) ;
select SUBSTRING_INDEX( 'www.baidu.com' , '.' , 2 ) ;
select SUBSTRING_INDEX( 'www.baidu.com' , '.' , 3 ) ;
select SUBSTRING_INDEX( 'www.baidu.com' , NULL , 2 ) ;
split( < str> , < pat> , [ < trimTailEmpty> ] )
入参
str:必填。STRING类型,表示待分割的原始字符串。pat:必填。STRING类型的分隔符,支持正则表达式语法。trimTailEmpty: 可选参数,默认值为true,设置为false时保留末尾空字符串 (Hive兼容)。
SELECT split( "a,b,c" , "," ) ;
SELECT split( "a,b,,c" , "," ) ;
SELECT split( "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指定的段。
select split_part( 'a,b,c,d' , ',' , 1 ) ;
select split_part( 'a,b,c,d' , ',' , 1 , 2 ) ;
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> )
SELECT REPLACE ( 'abc0,abc1,abc2,abc3' , 'abc2' , '====' ) ;
SELECT REPLACE ( 'abc0,abc1,abc2,abc3' , NULL , '====' ) ;
TRANSLATE:将A出现在B中的字符串替换为C字符串。
string translate( string| varchar < str1> , string| varchar < str2> , string| varchar < str3> )
SELECT translate( 'abcdef' , 'abc' , '111' ) ;
SELECT translate( 'abcdef' , 'abc' , NULL ) ;
6、字符串清洗与格式化
string trim( string < str> [ , < trimChars> ] )
string trim( [ BOTH] [ < trimChars> ] from < str> )
入参
str:必填。STRING类型。待去除左右两端字符的字符串。trimChars:可选。String类型。待去除的字符。
select trim( ' mxx ' ) ;
select trim( 'yxy1111yxx' , 'yx' ) ;
select trim( 'yx1111xx' , 'xy' ) ;
select trim( 'yx1111xx' , 'x' ) ;
select trim( 'yx1111xx' , 'y' ) ;
select trim( null ) ;
string ltrim( string < str> [ , < trimChars> ] )
string trim( leading [ < trimChars> ] from < str> )
select ltrim( ' yxTxyomxx ' ) ;
select ltrim( 'yxTxyomxx' , 'xy' ) ;
select ltrim( null ) ;
string rtrim( string < str> [ , < trimChars> ] )
string trim( trailing [ < trimChars> ] from < str> )
select rtrim( ' yxTxyomxx ' ) ;
select rtrim( 'yxTxyomxx' , 'xy' ) ;
select rtrim( null ) ;
string lpad( string < str1> , int < length> , string < str2> )
入参:
str1:必填。STRING类型。待向左补位的字符串。length:必填。INT类型。补位后的目标位数。str2:必填。用于补位的字符串。
SELECT lpad( 'abc' , 5 , '12' ) ;
SELECT lpad( 'abc' , 7 , '12' ) ;
SELECT lpad( 'abc' , 0 , '12' ) ;
string rpad( string < str1> , int < length> , string < str2> )
入参
str1:必填。STRING类型。待向右补位的字符串。length:必填。INT类型。补位后的目标位数。str2:必填。用于补位的字符串。
SELECT rpad( 'abc' , 5 , '12' ) ;
SELECT rpad( 'abc' , 7 , '12' ) ;
SELECT rpad( 'abc' , 0 , '12' ) ;
INITCAP:将字符串转换为固定格式的字符串,单词之间以空格分隔。转换后的格式为:字符串中每个单词首字母大写,其余小写。
string initcap( < str> )
SELECT initcap( "oDps sql" ) ;
TOLOWER:将字符串中的英文字符转换为小写形式。
string tolower( string < source> )
SELECT tolower( 'aBcD中国12' ) ;
SELECT tolower( NULL ) ;
TOUPPER:将字符串中的英文字符转换为大写形式。
string toupper( string < source> )
SELECT toupper( 'aBcD中国12' ) ;
SELECT toupper( NULL ) ;
FORMAT_NUMBER:将数字转化为指定格式的字符串。
STRING FORMAT_NUMBER( DOUBLE | BIGINT | INT | SMALLINT | TINYINT | FLOAT | DECIMAL | STRING < expr1> , INT < expr2> )
入参:
expr1:必填。需要格式化的数据。expr2:必填。INT类型,取值范围为0~340。指代需要保留的小数位数。也可以为类似#,###,###.##格式的描述。
SELECT FORMAT_NUMBER( 5.230134 , 3 ) ;
SELECT FORMAT_NUMBER( 12332.123456 , '#,###,###,###.###' ) ;
SELECT FORMAT_NUMBER( NULL , 3 ) ;
TO_CHAR:将BOOLEAN、BIGINT、DECIMAL或DOUBLE类型值转为对应的STRING类型表示。
STRING TO_CHAR( BOOLEAN | BIGINT | DOUBLE | DECIMAL < value > )
SELECT to_char( 123 ) ;
SELECT to_char( NULL ) ;
7、正则表达式
REGEXP_COUNT:计算字符串从指定位置开始,匹配指定规则的子串数。
bigint regexp_count( string < source> , string < pattern> [ , bigint < start_position> ] )
入参:
source:必填。STRING类型。待搜索的字符串,其他类型会返回报错。pattern:必填。STRING类型常量或正则表达式。待匹配的模型。start_position:可选。BIGINT类型常量,必须大于0。
SELECT regexp_count( 'abcdef' , 'a.c' ) ;
SELECT regexp_count( 'abcdef' , 'a.c' ) ;
SELECT REGEXP_COUNT( 'abcdef' , NULL ) ;
REGEXP_EXTRACT:将字符串按照指定规则拆分为组后,返回指定组的字符串。
将字符串source 按照pattern 的分组规则进行字符串匹配,返回第groupid 个组匹配到的字符串内容。
string regexp_extract( string < source> , string < pattern> [ , bigint < groupid> ] )
select regexp_extract( 'foothebar' , 'foo(.*?)(bar)' , 0 ) ;
select regexp_extract( 'foothebar' , 'foo(.*?)(bar)' ) ;
select regexp_extract( 'foothebar' , 'foo(.*?)(bar)' , 1 ) ;
select regexp_extract( 'foothebar' , 'foo(.*?)(bar)' , 2 ) ;
REGEXP_EXTRACT_ALL:在字符串中查找所有出现的正则表达式匹配的子字符串,并把找到的字符串以数组形式返回。
array< T> regexp_extract_all( string < source> , string < pattern> [ , bigint < group_id> ] )
select regexp_extract_all( '100-200,300-400' , '(\\d+)-(\\d+)' ) ;
select regexp_extract_all( '100-200,300-400' , '(\\d+)-(\\d+)' , 1 ) ;
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> ] ] ] )
select regexp_instr( 'ilov.ewow.taobd' , 'o[[:alpha:]]{1}' , 1 , 1 ) ;
select regexp_instr( 'ilov.ewow.taobd' , 'o[[:alpha:]]{1}' , 1 , 2 ) ;
select regexp_instr( 'ilov.ewow.taobd' , 'o[[:alpha:]]{1}' , 1 , 3 ) ;
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 的字符串替换后的字符串。
SELECT regexp_replace( 'abcd,abcd,abcd' , 'a' , '1' , 0 ) ;
SELECT regexp_replace( 'abcd,abcd,abcd' , 'a' , '1' , 1 ) ;
SELECT regexp_replace( 'abcd,abcd,abcd' , NULL , '1' , 1 ) ;
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,表示返回第一次匹配的子串。
SELECT regexp_substr( 'abc0,abc1,abc2' , '[0-9]' ) ;
SELECT regexp_substr( 'abc0,abc1,abc2' , '[0-9]' , 1 , 1 ) ;
SELECT regexp_substr( 'abc0,abc1,abc2' , '[0-9]' , 1 , 2 ) ;
SELECT regexp_substr( 'abc0,abc1,abc2' , '[0-9]' , 1 , 3 ) ;
SELECT regexp_substr( 'abc0,abc1,abc2' , NULL , 1 , 3 ) ;
8、哈希与加密
MASK_HASH:返回基于字符串表达式计算的Hash值。
mask_hash( < expr> )
SELECT mask_hash( 'abc' ) ;
SELECT mask_hash( 123 ) ;
SELECT mask_hash( NULL ) ;
string md5( string < str> )
SELECT md5( 'abc' ) ;
SELECT md5( 123 ) ;
SELECT md5( NULL ) ;
9、URL解析
PARSE_URL:对URL进行解析返回指定部分的信息。
string parse_url( string < url> , string < part> [ , string < key > ] )
select parse_url( 'file://username:password@example.com:8042/over/there/index.dtb?type=animal&name=narwhal#nose' , 'HOST' ) ;
select parse_url( 'file://username:password@example.com:8042/over/there/index.dtb?type=animal&name=narwhal#nose' , 'PATH' ) ;
select parse_url( 'file://username:password@example.com:8042/over/there/index.dtb?type=animal&name=narwhal#nose' , 'QUERY' , 'type' ) ;
select parse_url( 'file://username:password@example.com:8042/over/there/index.dtb?type=animal&name=narwhal#nose' , 'REF' ) ;
select parse_url( 'file://username:password@example.com:8042/over/there/index.dtb?type=animal&name=narwhal#nose' , 'PROTOCOL' ) ;
select parse_url( 'file://username:password@example.com:8042/over/there/index.dtb?type=animal&name=narwhal#nose' , 'AUTHORITY' ) ;
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链接会返回报错。key1、key2:必填。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 > )
select from_json( '{"a":1, "b":0.8}' , 'a int, b double' ) ;
TO_JSON:将指定的复杂类型输出为JSON字符串。
STRING TO_JSON( < expr> )
SELECT TO_JSON( MAP( 'a' , 1 ) ) ;
GET_JSON_OBJECT:在一个标准JSON字符串中,按照指定方式抽取指定的字符串。
STRING GET_JSON_OBJECT( JSON < json> , STRING < json_path> )
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 > )
参数 是否必填 说明 str 是 STRING类型。待拆分的字符串。 split1、split2 否 STRING类型。用于作为分隔符的字符串,按照指定的两个分隔符拆分源字符串。如果表达式中没有指定这两项,默认split1 为";",split2 为":"。当某个被split1 拆分后的字符串中有多个split2 时,返回结果未定义。 key 是 STRING类型。将字符串按照split1 和split2 拆分后,返回key 值对应的Value。
SELECT KEYVALUE( '0:1\;1:2' , 0 ) ;
SELECT KEYVALUE( '0:1\;1:2' , 1 ) ;
SELECT KEYVALUE( 'age:18;genda:f;address:北京' , ';' , ':' , 'age' ) ;
SELECT KEYVALUE( 'age:18;genda:f;address:北京' , ';' , ':' , 'address' ) ;
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)
SELECT KEYVALUE( 'age:18;genda:f;address:北京' , ';' , ':' , 'age' ) ;
SELECT KEYVALUE( 'age:18;genda:f;address:北京' , ';' , ':' , 'address' ) ;
SELECT KEYVALUE_TUPLE( 'age:18;genda:f;address:北京' , ';' , ':' , 'age' , 'address' )
12、其它
SOUNDEX:将普通字符串替换为SOUNDEX字符串。
string soundex( string < str> )
select soundex( 'hello' ) ;
select soundex( NULL ) ;
CHAR_MATCHCOUNT:计算A字符串出现在B字符串中的字符个数。
bigint char_matchcount( string < str1> , string < str2> )
SELECT CHAR_MATCHCOUNT( 'a' , 'abcdefgh' ) ;
SELECT CHAR_MATCHCOUNT( 'abc' , 'abcdefgh' ) ;
SELECT CHAR_MATCHCOUNT( NULL , 'abcdefgh' ) ;
string| array reverse( string| array < value > )
SELECT reverse( 'i am li' ) ;
SELECT reverse( array( 1 , 2 , 3 ) ) ;
SELECT reverse( NULL ) ;
string space( bigint < n> )
SELECT SPACE( 10 ) ;
SELECT LENGTH( SPACE( 10 ) ) ;