本文为您介绍数据分析支持的字符串函数的命令格式、参数说明及示例。
函数 | 功能 |
CHR | 将指定ASCII码转换成字符。 |
CONCAT | 将参数中的所有字符串连接在一起。 |
GET_JSON_OBJECT | 获取JSON字符串中的指定字符串。 |
INSTR | 计算子字符串在整个字符串中的位置。 |
BASE64_DECODE | 对Base64加密数据,进行Base64解码。 |
LENGTH | 返回字符串的长度。 |
LENGTHB | 返回字符串以字节为单位的长度。 |
MD5 | 计算字符串的MD5值。 |
REGEXP_REPLACE | 将字符串中指定位置的子字符串替换成新字符串后返回。 |
SPLIT_PART | 依照分隔符拆分字符串,返回指定闭区间的子串。 |
SUBSTR | 返回字符串从指定位置开始指定长度的子串。 |
TOLOWER | 返回英文字符串对应的小写字符串。 |
TOUPPER | 返回英文字符串对应的大写字符串。 |
TO_CHAR | 将BOOLEAN、BIGINT、DECIMAL或DOUBLE类型转为对应的STRING类型表示。 |
TRIM | 去除字符串的左右空格。 |
LTRIM | 去除字符串的左空格。 |
RTRIM | 去除字符串的有空格。 |
REVERSE | 返回倒序字符串。 |
ASCII | 返回字符串第一个字符的ASCII码。 |
LPAD | 用b字符串将a字符串向左补足到len位。 |
RPAD | 用b字符串将a字符串向右补足到len位。 |
REPLACE | 将字符串中指定字符串替换为新字符串后返回。 |
URL_ENCODE | 将输入字符串编码为application/x-www-form-urlencoded MIME格式。 |
URL_DECODE | 将输入字符串从application/x-www-form-urlencoded MIME格式转为正常字符串,是URL_ENCODE的逆过程。 |
ENDSWITH | 判断字符串1的值是否以字符串2结尾。 |
TO_BASE64 | 将二进制数据转换成对应base64编码的字符串输出。 |
CHR
- 命令格式
STRING CHR(BIGINT ascii)
- 命令说明
将指定ASCII码ascii转换成字符。
- 参数说明
ascii:BIGINT类型的ASCII值。参数范围是0~255,超过此范围会引发异常。如果输入为STRING、DOUBLE或DECIMAL类型,则会隐式转换为BIGINT类型后参与运算,其它类型会返回异常。
- 返回值说明
返回STRING类型。如果输入参数为NULL,则返回NULL。
CONCAT
- 命令格式
STRING CONCAT(STRING a, STRING b...)
- 命令说明
将参数中的所有字符串连接在一起。
- 参数说明
输入参数为STRING类型。如果输入参数为BIGINT、DOUBLE、DECIMAL或DATETIME类型,则会隐式转换为STRING类型后参与运算,其它类型会返回异常。
- 返回值类型
返回STRING类型。如果没有参数或者任一参数为NULL,则返回NULL。
- 示例
CONCAT('ab','c') = 'abc' CONCAT() = NULL CONCAT('a', null, 'b') = NULL
GET_JSON_OBJECT
- 命令格式
STRING GET_JSON_OBJECT(STRING json,STRING path)
- 命令说明
用于在一个标准JSON字符串中,按照
path
抽取指定的字符串。每次调用该函数时,都会读一次原始数据,因此反复调用可能浪费性能和费用。您可以通过GET_JSON_OBJECT
,结合UDTF,轻松转换JSON格式日志数据,避免多次调用函数。 - 参数说明
JSON
:STRING类型,标准的JSON
格式字符串。path
:STRING类型,表示在JSON
中的path
,以$
开头。path
详情请参见LanguageManual UDF。$
:表示根节点。.
:表示子节点。[]
:[number]
表示数组下标,数组格式为key[sub1][sub2][sub3]……
。*
:Wildcard for []
,返回整个数组。*
不支持转义。
- 返回值说明
- 如果
JSON
为空或非法的JSON
格式,则返回NULL。 - 如果
JSON
合法,path
也存在,则返回对应字符串。 - 不支持一个Object中出现相同的Key,例如
{a:1, a:0}
,可能导致无法解析。 - 不支持Emoji表情字符串。
- 如果
- 示例
- 示例1:
--json内容。 {"store": {"fruit":[{"weight":8,"type":"apple"},{"weight":9,"type":"pear"}], "bicycle":{"price":19.95,"color":"red"} }, "email":"amy@only_for_json_udf_test.net", "owner":"amy" }
执行如下命令提取JSON
对象中的信息。--返回amy。 GET_JSON_OBJECT(json, '$.owner'); --返回{"weight":8,"type":"apple"}。 GET_JSON_OBJECT(json, '$.store.fruit\[0]'); --返回NULL。 GET_JSON_OBJECT(json, '$.non_exist_key');
- 示例2:
GET_JSON_OBJECT('{"array":[["aaaa",1111],["bbbb",2222],["cccc",3333]]}','$.array[1][1]')= "2222" GET_JSON_OBJECT('{"aaa":"bbb","ccc":{"ddd":"eee","fff":"ggg","hhh":["h0","h1","h2"]},"iii":"jjj"}','$.ccc.hhh[*]') = "["h0","h1","h2"]" GET_JSON_OBJECT('{"aaa":"bbb","ccc":{"ddd":"eee","fff":"ggg","hhh":["h0","h1","h2"]},"iii":"jjj"}','$.ccc.hhh[1]') = "h1"
- 示例1:
INSTR
- 命令格式
BIGINT INSTR(STRING str1, STRING str2[, BIGINT start_position[, BIGINT nth_appearance]])
- 命令说明
用于计算子串
str2
在字符串str1
中的位置。 - 参数说明
str1
:STRING类型,要搜索的字符串。如果输入为BIGINT、DOUBLE、DECIMAL或DATETIME类型,则会隐式转换为STRING类型后参与运算,其它类型会返回异常。str2
:STRING类型,要搜索的子串。如果输入为BIGINT、DOUBLE、DECIMAL或DATETIME类型,则会隐式转换为STRING类型后参与运算,其它类型会返回异常。start_position
:BIGINT类型,其它类型会返回异常。表示从str1
的第几个字符开始搜索,默认起始位置是第一个字符位置1。nth_appearance
:BIGINT类型,大于0。表示子串在字符串中的第nth_appearance
次匹配的位置。如果nth_appearance
为其它类型或小于等于0,则返回异常。
- 返回值说明
- 返回BIGINT类型。
- 如果在
str1
中未找到str2
,则返回0。 - 如果任一输入参数为NULL,则返回NULL。
- 如果
str2
为空串,则总能匹配成功,例如instr(‘abc’, ‘’)
会返回1。
- 示例
INSTR('Tech on the net', 'e') = 2 INSTR('Tech on the net', 'e', 1, 1) = 2 INSTR('Tech on the net', 'e', 1, 2) = 11 INSTR('Tech on the net', 'e', 1, 3) = 14
BASE64_DECODE
- 命令格式
base64_decode(STRING str)
- 命令说明
当字符串为Base64加密数据时,可使用该函数进行Base64解码处理
- 参数说明
str:STRING类型的字符串。如果输入为BIGINT、DOUBLE、DECIMAL、TIMESTAMP或DATE类型,则会隐式转换为STRING类型后参与运算。如果输入为非Base64加密的字符串,则返回原字符串。
- 返回值说明
返回STRING类型。
LENGTH
- 命令格式
BIGINT LENGTH(STRING str)
- 命令说明
返回字符串
str
的长度。 - 参数说明
str
:STRING类型。如果输入为BIGINT、DOUBLE、DECIMAL或DATETIME类型,则会隐式转换为STRING类型后参与运算,其它类型会返回异常。- 返回BIGINT类型。如果输入参数为NULL,则返回NULL;如果输入参数为非UTF-8编码格式,则返回-1。
- 示例
LENGTH('hi! 中国') = 6
LENGTHB
- 命令格式
BIGINT LENGTHB(STRING str)
- 命令说明
返回字符串
str
的以字节为单位的长度。 - 参数说明
str
:STRING类型。如果输入为BIGINT、DOUBLE、DECIMAL或DATETIME类型,则会隐式转换为STRING类型后参与运算,其它类型会返回异常。- 返回BIGINT类型。如果输入参数为NULL,则返回NULL。
- 示例
LENGTHB('hi! 中国') = 10
MD5
- 命令格式
STRING MD5(STRING value)
- 命令说明
计算输入字符串
value
的MD5值。 - 参数说明
value
:STRING类型。如果输入为BIGINT、DOUBLE、DECIMAL或DATETIME类型,则会隐式转换为STRING类型参与运算,其它类型会返回异常。 - 返回值说明
返回STRING类型。如果输入参数为NULL,则返回NULL。
REGEXP_REPLACE
- 命令格式
STRING REGEXP_REPLACE(STRING source, STRING pattern, STRING replace_string[, BIGINT occurrence])
- 命令说明
将
source
字符串中,第occurrence
次匹配pattern
的子串,替换成指定字符串replace_STRING
后,返回结果字符串。 - 参数说明
source
:STRING类型,要替换的字符串。pattern
:STRING类型常量,要匹配的模式,pattern
为空串时返回异常。replace_string
:STRING类型,将匹配的pattern
替换成的字符串。occurrence
:BIGINT类型常量,必须大于等于0,表示将第几次匹配替换成replace_string
,为0时表示替换掉所有的匹配子串。为其它类型或小于0时,返回异常。可缺省,默认值为0。
- 返回值说明
- 返回STRING类型。当引用不存在的组时,不进行替换。
- 如果任一输入参数为NULL,则返回NULL。
- 如果
replace_string
为NULL且pattern
有匹配,则返回NULL。 - 如果
replace_string
为NULL但pattern
不匹配,则返回原字符串。
- 示例
regexp_replace("123.456.7890", "([[:digit:]]{3})\\.([[:digit:]]{3})\\.([[:digit:]]{4})", "(\\1)\\2-\\3", 0) = "(123)456-7890" regexp_replace("abcd", "(.)", "\\1 ", 0) = "a b c d " regexp_replace("abcd", "(.)", "\\1 ", 1) = "a bcd" regexp_replace("abcd", "(.)", "\\2", 1) = "abcd" -- 因为pattern中只定义了一个组,引用的第二个组不存在。 -- 请避免这样使用,引用不存在的组的结果未定义。 regexp_replace("abcd", "(.*)(.)$", "\\2", 0) = "d" regexp_replace("abcd", "a", "\\1", 0) = "bcd" -- 因为在pattern中没有组的定义,所以\1引用了不存在的组。 -- 请避免这样使用,引用不存在的组的结果未定义。
SPLIT_PART
- 命令格式
STRING SPLIT_PART(STRING str, STRING separator, BIGINT start[, BIGINT end])
- 命令说明
依照分隔符
separator
拆分字符串str
,返回从第start
部分到第end
部分的子串(闭区间)。 - 参数说明
str
:STRING类型,要拆分的字符串。如果是BIGINT、DOUBLE、DECIMAL或DATETIME类型,则会隐式转换为STRING类型后参与运算,其它类型会返回异常。separator
:STRING类型常量,拆分用的分隔符,可以是一个字符,也可以是一个字符串,其它类型返回异常。start
:BIGINT类型常量,必须大于0。非常量或其它类型会返回异常。返回段的开始编号(从1开始),如果没有指定end
,则返回start
指定的段。end
:BIGINT类型常量,大于等于start
,否则返回异常。返回段的截止编号,非常量或其它类型会返回异常。此参数可省略,缺省时表示最后一部分。
- 返回值说明
- 返回STRING类型。
- 如果
start
的值大于切分后实际的分段数,例如字符串拆分完有6个片段,start
大于6,返回空串。 - 如果
separator
不存在于str
中,且start
指定为1,返回整个str
。如果str
为空串,则输出空串。 - 如果
separator
为空串,则返回原字符串str
。 - 如果
end
大于片段个数,按片段个数处理。 - 如果任一输入参数为NULL,则返回NULL。
- 示例
SPLIT_PART('a,b,c,d', ',', 1) = 'a' SPLIT_PART('a,b,c,d', ',', 1, 2) = 'a,b' SPLIT_PART('a,b,c,d', ',', 10) = ''
SUBSTR
- 命令格式
STRING SUBSTR(STRING str, BIGINT start_position[, BIGINT length])
- 命令说明
返回字符串
str
从start_position
开始,长度为length
的子串。 - 参数说明
str
:STRING类型,如果输入为BIGINT、DECIMAL、DOUBLE或DATETIME类型,则会隐式转换为STRING类型后参与运算,其它类型会返回异常。start_position
:BIGINT类型,起始位置为1。当start_position
为0时,返回空串。当start_position
为负数时,表示开始位置是从字符串的结尾往前倒数,最后一个字符是-1,往前数依次为-2、-3…,其它类型会返回异常。length
:BIGINT类型,表示子串的长度值。值大于0,其它类型或值小于等于0返回异常。
- 返回值说明
返回STRING类型。如果任一输入参数为NULL,则返回NULL。
说明 当length
被省略时,返回到str
结尾的子串。 - 示例
SUBSTR("abc", 2) = "bc" SUBSTR("abc", 2, 1) = "b" SUBSTR("abc",-2,2) = "bc" SUBSTR("abc",-3) = "abc"
TOLOWER
- 命令格式
STRING TOLOWER(STRING source)
- 命令说明
输出英文字符串
source
对应的小写字符串。 - 参数说明
source
:STRING类型。如果输入为BIGINT、DOUBLE、DECIMAL或DATETIME类型,则会隐式转换为STRING类型后参与运算,其它类型会返回异常。 - 返回值说明
返回STRING类型。如果输入参数为NULL,则返回NULL。
- 示例
tolower("aBcd") = "abcd" tolower("哈哈Cd") = "哈哈cd"
TOUPPER
- 命令格式
STRING TOUPPER(STRING source)
- 命令说明
输出英文字符
source
串对应的大写字符串。 - 参数说明
source
:STRING类型。如果输入为BIGINT、DOUBLE、DECIMAL或DATETIME类型,则会隐式转换为STRING类型后参与运算,其它类型会返回异常。 - 返回值说明
返回STRING类型。如果输入参数为NULL,则返回NULL。
- 示例
toupper("aBcd") = "ABCD" toupper("哈哈Cd") = "哈哈CD"
TO_CHAR
- 命令格式
STRING TO_CHAR(BOOLEAN value) STRING TO_CHAR(BIGINT value) STRING TO_CHAR(DOUBLE value) STRING TO_CHAR(DECIMAL value)
- 命令说明
将BOOLEAN、BIGINT、DECIMAL或DOUBLE类型转为对应的STRING类型表示。
- 参数说明
value
:BOOLEAN、BIGINT、DECIMAL型或DOUBLE类型,其它类型会返回异常。 - 返回值说明
返回STRING类型。如果输入参数为NULL,则返回NULL。
- 示例
TO_CHAR(123) = '123' TO_CHAR(true) = 'TRUE' TO_CHAR(1.23) = '1.23' TO_CHAR(null) = NULL
TRIM
- 命令格式
STRING TRIM(STRING str)
- 命令说明
去除字符串
str
的左右空格。 - 参数说明
str
:STRING类型。如果输入为BIGINT、DECIMAL、DOUBLE或DATETIME类型,则会隐式转换为STRING类型后参与运算,其它类型返回异常。 - 返回值说明
返回STRING类型。如果输入参数为NULL,则返回NULL。
- 示例
LTRIM(' abc ')="abc";
LTRIM
- 命令格式
STRING LTRIM(STRING str)
- 命令说明
去除字符串
str
的左边空格。 - 参数说明
str
:STRING类型。如果输入为BIGINT、DECIMAL、DOUBLE或DATETIME类型,则会隐式转换为STRING类型后参与运算,其它类型会返回异常。 - 返回值说明
返回为STRING类型。如果输入参数为NULL,则返回NULL。
- 示例
LTRIM(' abc ')="abc ";
RTRIM
- 命令格式
STRING RTRIM(STRING str)
- 命令说明
去除字符串
str
的右边空格。 - 参数说明
str
:STRING类型。如果输入为BIGINT、DECIMAL、DOUBLE或DATETIME类型,则会隐式转换为STRING类型后参与运算,其它类型会返回异常。 - 返回值说明
返回STRING类型。如果输入参数为NULL,则返回NULL。
- 示例
RTRIM('a abc ')="a abc";
REVERSE
- 命令格式
STRING REVERSE(STRING str)
- 命令说明
返回倒序字符串。
- 参数说明
str
:STRING类型。如果输入为BIGINT、DOUBLE、DECIMAL或DATETIME类型,则会隐式转换为STRING类型后参与运算,其它类型会返回异常。 - 返回值说明
返回STRING类型。如果输入参数为NULL,则返回NULL。
- 示例
REVERSE('abcedfg')="gfdecba"
ASCII
- 命令格式
BIGINT ASCII(STRING str)
- 命令说明
返回字符串
str
第一个字符的ASCII码。 - 参数说明
str
:STRING类型。如果输入为BIGINT、DOUBLE、DECIMAL或DATETIME类型,则会隐式转换为STRING类型后参与运算,其它类型会返回异常。 - 返回值说明
返回BIGINT类型。
- 示例
--返回97。 ASCII('abcde')
LPAD
- 命令格式
STRING LPAD(STRING a, INT len, STRING b)
- 命令说明
用
b
字符串将a
字符串向左补足到len
位。 - 参数说明
len
:INT整型。a
、b
:STRING类型。
- 返回值说明
返回STRING类型。如果
len
小于a
的位数,则返回a
从左开始截取len
位字符。如果len
为0,则返回空。 - 示例
lpad('abcdefgh',10,'12')='12abcdefgh' lpad('abcdefgh',5,'12')='abcde' lpad('abcdefgh',0,'12') --返回空
RPAD
- 命令格式
STRING RPAD(STRING a, INT len, STRING b)
- 命令说明
用
b
字符串将a
字符串向右补足到len
位。 - 参数说明
len
:INT整型。a
、b
:STRING类型。
- 返回值说明
返回STRING类型。如果
len
小于a
的位数,则返回a
从左开始截取len
位字符;如果len
为0,则返回空。 - 示例
rpad('abcdefgh',10,'12')='abcdefgh12' rpad('abcdefgh',5,'12')='abcde' rpad('abcdefgh',0,'12') -- 返回空。
REPLACE
- 命令格式
STRING REPLACE(STRING a, STRING OLD, STRING NEW)
- 命令说明
用
NEW
字符串替换a
字符串中与OLD
字符串完全重合的部分并返回a
。 - 参数说明
参数均为STRING类型。
- 返回值说明
返回STRING类型。如果任一输入参数为NULL,则返回NULL。
- 示例
REPLACE('ababab','abab','12')='12ab' REPLACE('ababab','cdf','123')='ababab' REPLACE('123abab456ab',null,'abab')=null
URL_ENCODE
- 命令格式
STRING URL_ENCODE(STRING input[, STRING encoding])
- 命令说明将输入字符串编码为
application/x-www-form-urlencoded MIME
格式。- a~z、A~Z保持不变。
- 英文句点(.)、短划线(-)、星号(*)和下划线(_)保持不变。
- 空格转为加号(+)。
- 其余字符根据指定的
encoding
转为字节值,然后将每个字节值表示为%xy
的格式,xy
是该字符的十六进制表示方式。
- 参数说明
input
:要输入的字符串。encoding
:指定的编码格式,支持GBK或UTF-8等标准编码格式,不输入默认为UTF-8。
- 返回值说明
返回STRING类型。如果输入参数为NULL,则返回NULL。
- 示例
URL_ENCODE('示例for URL_ENCODE:// (fdsf)') = "%E7%A4%BA%E4%BE%8Bfor+URL_ENCODE%3A%2F%2F+%28fdsf%29" URL_ENCODE('Example for URL_ENCODE:// dsf(fasfs)', 'GBK') = "Example+for+URL_ENCODE+%3A%2F%2F+dsf%28fasfs%29"
URL_DECODE
- 命令格式
STRING URL_DECODE(STRING input[, STRING encoding])
- 命令说明将输入字符串从
application/x-www-form-urlencoded MIME
格式转为正常字符串,是URL_ENCODE
的逆过程。- a~z、A~Z保持不变。
- 英文句点(.)、短划线(-)、星号(*)和下划线(_)保持不变。
- 加号(+)转为空格。
%xy
格式的序列转为对应的字节值,连续的字节值根据输入的encoding
名称解码为对应的字符串。- 其余的字符保持不变。
- 函数最终的返回值是UTF-8编码的字符串。
- 参数说明
input
:要输入的字符串。encoding
:指定的编码格式,支持GBK或UTF-8等标准编码格式,不输入默认为UTF-8。
- 返回值说明
返回STRING类型。如果输入参数为NULL,则返回NULL。
- 示例
URL_DECODE('%E7%A4%BA%E4%BE%8Bfor+URL_DECODE%3A%2F%2F+%28fdsf%29')= "示例for URL_DECODE:// (fdsf)" URL_DECODE('Example+for+URL_DECODE+%3A%2F%2F+dsf%28fasfs%29', 'GBK') = "Example for URL_DECODE:// dsf(fasfs)"
ENDSWITH
- 命令格式
BOOLEAN ENDSWITH(STRING input, STRING suffix)
- 命令说明
判断input的值是否以suffix结尾。
- 参数说明
输入参数为STRING类型。如果输入参数为BIGINT、DOUBLE、DECIMAL或DATETIME类型,则会隐式转换为STRING类型后参与运算,其它类型会返回异常。
- 返回值说明
返回BOOLEAN类型。
TO_BASE64
- 命令
TO_BASE64(BINARY bin)
- 命令说明
将二进制数据转换成对应base64编码的字符串输出。
- 参数说明
输入参数为BINARY类型。
- 返回值说明
返回base64编码的字符串。