您可以在MaxCompute SQL中使用字符串函数对指定字符串进行灵活处理。本文为您提供MaxCompute SQL支持的字符串函数的命令格式、参数说明及示例,指导您使用字符串函数完成开发。
MaxCompute SQL支持的字符串函数如下。
函数 | 功能 |
---|---|
ASCII | 返回字符串的第一个字符的ASCII码。 |
BASE64 | 将二进制表示值转换为BASE64编码格式字符串。 |
CHAR_MATCHCOUNT | 计算A字符串出现在B字符串中的字符个数。 |
CHR | 将指定ASCII码转换成字符。 |
CONCAT | 将字符串连接在一起。 |
FROM_JSON | 根据给定的JSON字符串和输出格式信息,返回ARRAY、MAP或STRUCT类型。 |
GET_JSON_OBJECT | 在一个标准JSON字符串中,按照指定方式抽取指定的字符串。 |
INSTR | 计算A字符串在B字符串中的位置。 |
IS_ENCODING | 判断字符串是否可以从指定的A字符集转换为B字符集。 |
KEYVALUE | 将字符串拆分为Key-Value对,并将Key-Value对分开,返回Key对应的Value。 |
LENGTH | 计算字符串的长度。 |
LENGTHB | 计算字符串以字节为单位的长度。 |
MD5 | 计算字符串的MD5值。 |
PARSE_URL | 对URL进行解析返回指定信息。 |
REGEXP_COUNT | 计算字符串从指定位置开始,匹配指定规则的子串数。 |
REGEXP_EXTRACT | 将字符串按照指定规则拆分为组后,返回指定组的字符串。 |
REGEXP_INSTR | 返回字符串从指定位置开始,与指定规则匹配指定次数的子串的起始或结束位置。 |
REGEXP_REPLACE | 将字符串中,与指定规则在指定次数匹配的子串替换为另一字符串。 |
REGEXP_SUBSTR | 返回字符串中,从指定位置开始,与指定规则匹配指定次数的子串。 |
SPLIT_PART | 按照分隔符拆分字符串,返回指定部分的子串。 |
SUBSTR | 返回STRING类型字符串从指定位置开始,指定长度的子串。 |
SUBSTRING | 返回STRING或BINARY类型字符串从指定位置开始,指定长度的子串。 |
TO_CHAR | 将BOOLEAN、BIGINT、DECIMAL或DOUBLE类型值转为对应的STRING类型表示。 |
TO_JSON | 将指定的复杂类型输出为JSON字符串。 |
TOLOWER | 将字符串中的英文字符转换为小写形式。 |
TOUPPER | 将字符串中的英文字符转换为大写形式。 |
TRIM | 去除字符串的左右空格。 |
LTRIM | 去除字符串的左边空格。 |
RTRIM | 去除字符串的右边空格。 |
REPEAT | 返回将字符串重复指定次数后的结果。 |
REVERSE | 返回倒序字符串。 |
UNBASE64 | 将BASE64编码格式字符串转换为二进制表示值。 |
CONCAT_WS | 将参数中的所有字符串按照指定的分隔符连接在一起。 |
JSON_TUPLE | 在一个标准的JSON字符串中,按照输入的一组键抽取各个键指定的字符串。 |
LPAD | 将字符串向左补足到指定位数。 |
RPAD | 将字符串向右补足到指定位数。 |
REPLACE | 将字符串中与指定字符串匹配的子串替换为另一字符串。 |
SOUNDEX | 将普通字符串替换为SOUNDEX字符串。 |
SUBSTRING_INDEX | 截取字符串指定分隔符前的字符串。 |
TRANSLATE | 将A出现在B中的字符串替换为C字符串。 |
URL_ENCODE | 将字符串编码为application/x-www-form-urlencoded MIME 格式。
|
URL_DECODE | 将字符串从application/x-www-form-urlencoded MIME 格式转为常规字符。
|
ASCII
- 命令格式
bigint ascii(string <str>)
- 命令说明
返回字符串str第一个字符的ASCII码。
- 参数说明
str:必填。STRING类型。如果输入为BIGINT、DOUBLE、DECIMAL或DATETIME类型,则会隐式转换为STRING类型后参与运算,其他类型会返回报错。
- 返回值说明
返回BIGINT类型。输入参数为NULL,则返回NULL。
- 示例
- 示例1:返回字符串
abcde
第一个字符的ASCII码。命令示例如下。--返回97。 select ascii('abcde');
- 示例2:输入参数为
null
。命令示例如下。--返回NULL。 select ascii(null);
- 示例1:返回字符串
BASE64
- 命令格式
string base64(binary <value>)
- 命令说明
将value从二进制转换为BASE64编码格式字符串。
- 参数说明
value:必填。BINARY类型。待转换参数值。
- 返回值说明
返回STRING类型。输入参数为NULL,则返回NULL。
- 示例
- 示例1:将
cast ('alibaba' as binary)
二进制结果转换为BASE64编码格式字符串。命令示例如下。--返回YWxpYmFiYQ==。 select base64(cast ('alibaba' as binary));
- 示例2:输入参数为
null
。命令示例如下。--返回NULL。 select base64(null);
- 示例1:将
CHAR_MATCHCOUNT
- 命令格式
bigint char_matchcount(string <str1>, string <str2>)
- 命令说明
计算str1中有多少个字符出现在str2中。
- 参数说明
str1、str2:必填。STRING类型,必须为有效的UTF-8字符串。如果对比过程中发现有无效字符(非UNICODE编码),则返回负值。
- 返回值说明
返回BIGINT类型。如果任一输入参数为NULL,则返回NULL。
- 示例
- 示例1:计算字符串
aabc
出现在abcde
中的字符个数。命令示例如下。--返回4。 select char_matchcount('aabc','abcde');
- 示例2:任一输入为
null
。命令示例如下。--返回NULL。 select char_matchcount(null,'abcde');
- 示例1:计算字符串
CHR
- 命令格式
string chr(bigint <ascii>)
- 命令说明
将指定ASCII码转换为字符。
- 参数说明
ascii:必填。BIGINT类型的ASCII值。取值范围为0~128,超过此范围会返回异常。如果输入为STRING、DOUBLE或DECIMAL类型,则会隐式转换为BIGINT类型后参与运算,其他类型会返回报错。
- 返回值说明
返回STRING类型。如果输入参数为NULL,则返回NULL。
- 示例
- 示例1:将ASCII码
100
转换为字符。命令示例如下。--返回d。 select chr(100);
- 示例2:输入为
null
。命令示例如下。--返回NULL。 select chr(null);
- 示例3:输入为STRING类型字符。命令示例如下。
--隐式转换为BIGINT类型后参与运算,返回d。 select chr('100');
- 示例1:将ASCII码
CONCAT
- 命令格式
string concat(string <str1>, string <str2>[,...])
- 命令说明
将参数中的所有字符串连接在一起。
- 参数说明
str1、str2:必填。STRING类型。如果输入参数为BIGINT、DOUBLE、DECIMAL或DATETIME类型,则会隐式转换为STRING类型后参与运算,其他类型会返回报错。
- 返回值说明
返回STRING类型。如果没有参数或任一参数为NULL,则返回NULL。
- 示例
- 示例1:连接字符串
aabc
和abcde
。命令示例如下。--返回aabcabcde。 select concat('aabc','abcde');
- 示例2:输入为空。命令示例如下。
--返回NULL。 select concat();
- 示例3:任一输入为
null
。命令示例如下。--返回NULL。 select concat('aabc','abcde',null);
- 示例1:连接字符串
FROM_JSON
- 命令格式
from_json(<jsonStr>, <schema>)
- 命令说明
- 参数说明
- jsonStr:必填。输入的JSON字符串。
- schema:必填。写法与建表语句的类型一致。例如
array<bigint>
、map<string, array<string>>
或struct<a:int, b:double, `C`:map<string,string>>
。说明 STRUCT的key区分大小写。此外,STRUCT类型还有一种写法a bigint, b double
,等同于struct<a:bigint, b:double>
。JSON数据类型与MaxCompute数据类型的对应关系如下。
JSON数据类型 MaxCompute数据类型 OBJECT STRUCT、MAP、STRING ARRAY ARRAY、STRING NUMBER TINYINT、SMALLINT、INT、BIGINT、FLOAT、DOUBLE、DECIMAL、STRING BOOLEAN BOOLEAN、STRING STRING STRING、CHAR、VARCHAR、BINARY、DATE、DATETIME NULL 所有类型 说明 对于OBJECT和ARRAY类型,会采用尽可能解析的方式,不匹配的类型会忽略。为了便于使用,所有的JSON类型都可以转换为MaxCompute的STRING类型。
- 返回值说明
返回ARRAY、MAP或STRUCT类型。
- 示例
- 示例1:将指定JSON字符串以指定格式输出。命令示例如下。
--返回{"a":1,"b":0.8}。 select from_json('{"a":1, "b":0.8}', 'a int, b double'); --返回{"time":"26/08/2015"}。 select from_json('{"time":"26/08/2015"}', 'time string'); --返回{"a":1,"b":0.8}。 select from_json('{"a":1, "b":0.8}', 'a int, b double, c string'); --返回[1,2,3]。 select from_json('[1, 2, 3, "a"]', 'array<bigint>'); --返回{"d":"v","a":"1","b":"[1,2,3]","c":"{}"}。 select from_json('{"a":1,"b":[1,2,3],"c":{},"d":"v"}', 'map<string, string>');
- 示例2:使用
map_keys
函数和from_json
函数实现类似JSON_KEYS的作用,获取JSON字符串中所有key的集合。命令示例如下。--返回["a","b"]。 select map_keys(from_json('{"a":1,"b":2}','map<string,string>'));
- 示例1:将指定JSON字符串以指定格式输出。命令示例如下。
GET_JSON_OBJECT
- 命令格式
string get_json_object(string <json>,string <path>)
- 命令说明
在一个标准JSON字符串中,按照path抽取指定的字符串。每次调用该函数时,都会读一次原始数据,因此反复调用可能影响性能和产生费用。您可以通过
get_json_object
,结合UDTF,轻松转换JSON格式日志数据,避免多次调用函数,详情请参见利用MaxCompute内建函数及UDTF转换JSON格式日志数据。 - 参数说明
- json:必填。STRING类型。标准的JSON格式对象。
- path:必填。STRING类型。表示在json中的path,以
$
开头。更多path信息,请参见LanguageManual UDF。相关最佳实践案例,请参见JSON数据从OSS迁移至MaxCompute。不同字符的含义如下:$
:表示根节点。.
:表示子节点。[]
:[number]
表示数组下标,数组格式为key[sub1][sub2][sub3]……
。*
:Wildcard for []
,返回整个数组。*
不支持转义。
- 返回值说明
- 如果json为空或非法的json格式,返回NULL。
- 如果json合法,path也存在,则返回对应字符串。
- 不支持一个Object中出现相同的Key,例如
{a:1, a:0}
,可能导致无法解析。 - 不支持Emoji表情字符串。
您可以通过在Session级别设置flagodps.sql.udf.getjsonobj.new
属性来控制函数的返回方式:- 当设置
set odps.sql.udf.getjsonobj.new=false;
时,函数返回行为采用了JSON保留字符转义的方式进行输出。例如换行符(\n)、引号(")等JSON保留字符使用字符串
'\n'
、'\"'
显示。 - 当设置
set odps.sql.udf.getjsonobj.new=true;
时,函数返回行为采用了保留原始字符串的方式进行输出。推荐您使用此配置,函数返回行为更标准,处理数据更方便,性能更好。返回值仍是一个JSON字符串,可以继续当做JSON来解析,而不再需要额外使用
replace
或regexp_replace
等函数替换反斜线。
说明 自2021年1月21日及之后新创建的MaxCompute项目中,get_json_object
函数的返回行为默认为保留原始字符串。2021年1月21日之前创建的MaxCompute项目中,get_json_object
函数的返回行为默认为JSON保留字符转义。您可以通过以下示例判断MaxCompute项目中get_json_object
函数采用了哪种行为,执行命令如下:select get_json_object('{"a":"[\\"1\\"]"}', '$.a'); --JSON保留字符转义的行为返回: [\"1\"] --保留原始字符串的行为返回: ["1"]
您可以提工单联系MaxCompute技术支持团队,将您的项目中的
get_json_object
函数返回行为切换为保留原始字符串的行为,避免在Session级别频繁设置属性。 - 示例
- 示例1:提取JSON对象
src_json.json
中的信息。命令示例如下。--JSON对象src_json.json的内容。 +----+ 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" } --提取owner字段信息,返回amy。 select get_json_object(src_json.json, '$.owner') from src_json; --提取store.fruit字段第一个数组信息,返回{"weight":8,"type":"apple"}。 select get_json_object(src_json.json, '$.store.fruit[0]') from src_json; --提取不存在的字段信息,返回NULL。 select get_json_object(src_json.json, '$.non_exist_key') from src_json;
- 示例2:提取数组型JSON对象的信息。命令示例如下。
--返回2222。 select get_json_object('{"array":[["aaaa",1111],["bbbb",2222],["cccc",3333]]}','$.array[1][1]'); --返回["h0","h1","h2"]。 select get_json_object('{"aaa":"bbb","ccc":{"ddd":"eee","fff":"ggg","hhh":["h0","h1","h2"]},"iii":"jjj"}','$.ccc.hhh[*]'); --返回h1。 select get_json_object('{"aaa":"bbb","ccc":{"ddd":"eee","fff":"ggg","hhh":["h0","h1","h2"]},"iii":"jjj"}','$.ccc.hhh[1]');
- 示例3:JSON输入为空或非法格式。命令示例如下。
--返回NULL。 select get_json_object('','$.array[1][1]'); --返回NULL。 select get_json_object('"array":["aaaa",1111],"bbbb":["cccc",3333]','$.array[1][1]');
- 示例1:提取JSON对象
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。当start_position为负数时表示开始位置是从字符串的结尾往前倒数,最后一个字符是-1,依次往前倒数。
- nth_appearance:可选。BIGINT类型,大于0。表示str2在str1中第nth_appearance次匹配的位置。如果nth_appearance为其他类型或小于等于0,则返回报错。
- 返回值说明
- 返回BIGINT类型。
- 如果在str1中未找到str2,则返回0。
- 如果任一输入参数为NULL,则返回NULL。
- 如果str2为空串,则总能匹配成功,例如
select instr('abc','');
会返回1。
- 示例
- 示例1:计算字符
e
在字符串Tech on the net
中的位置。命令示例如下。--返回2。 select instr('Tech on the net', 'e');
- 示例2:计算子串
ec
在字符串Tech on the net
中的位置。命令示例如下。--返回6。 select instr('Tech on the net', 'on');
- 示例3:计算字符
e
在字符串Tech on the net
中,从第3个字符开始,第2次出现的位置。命令示例如下。--返回14。 select instr('Tech on the net', 'e', 3, 2);
- 示例4:任一输入为
null
。命令示例如下。--返回NULL。 select instr('Tech on the net', null);
- 示例1:计算字符
IS_ENCODING
- 命令格式
boolean is_encoding(string <str>, string <from_encoding>, string <to_encoding>)
- 命令说明
判断输入的字符串str是否可以从指定的一个字符集from_encoding转为另一个字符集to_encoding。也可以用于判断输入是否为乱码,通常您可以将from_encoding设为UTF-8,to_encoding设为GBK。
- 参数说明
- str:必填。STRING类型。空字符串可以被认为属于任何字符集。
- from_encoding、to_encoding:必填。STRING类型,源及目标字符集。
- 返回值说明
返回BOOLEAN类型。如果str能够成功转换,则返回True,否则返回False。如果任一输入参数为NULL,则返回NULL。
- 示例
- 示例1:判断字符
测试
或測試
是否可以从utf-8
字符集转为gbk
字符集。命令示例如下。--返回true。 select is_encoding('测试', 'utf-8', 'gbk'); --返回true。 select is_encoding('測試', 'utf-8', 'gbk');
- 示例2:判断字符
測試
是否可以从utf-8
字符集转为gb2312
字符集。命令示例如下。--GB2312字库中不包括这两个字,返回false。 select is_encoding('測試', 'utf-8', 'gb2312');
- 示例3:任一输入为
null
。命令示例如下。--返回NULL。 select is_encoding('测试', null, 'gbk');
- 示例1:判断字符
KEYVALUE
- 命令格式
keyvalue(string <str>,[string <split1>,string <split2>,] string <key>) keyvalue(string <str>,string <key>)
- 命令说明
将字符串str按照split1分成Key-Value对,并按split2将Key-Value对分开,返回key所对应的Value。
- 参数说明
- str:必填。STRING类型。待拆分的字符串。
- split1、split2:可选。STRING类型。用于作为分隔符的字符串,按照指定的两个分隔符拆分源字符串。如果表达式中没有指定这两项,默认split1为
";"
,split2为":"
。当某个被split1拆分后的字符串中有多个split2时,返回结果未定义。 - key:必填。STRING类型。将字符串按照split1和split2拆分后,返回key值对应的Value。
- 返回值说明
- 返回STRING类型。
- split1或split2为NULL时,返回NULL。
- str或key为NULL或没有匹配的key时,返回NULL。
- 如果有多个Key-Value匹配,返回第一个匹配上的key对应的Value。
- 示例
- 示例1:将字符串
0:1\;1:2
拆分为Key-Value对,返回Key值1
对应的Value。命令示例如下。
没有指定split1和split2,默认split1为--返回2。 select keyvalue('0:1\;1:2', 1);
";"
,split2为":"
。经过split1拆分后,Key-Value对为0:1\,1:2
。经过split2拆分后变为如下。
返回Key为1所对应的Value值2。0 1/ 1 2
- 示例2:将字符串
“\;decreaseStore:1\;xcard:1\;isB2C:1\;tf:21910\;cart:1\;shipping:2\;pf:0\;market:shoes\;instPayAmount:0\;”
按照“\;”
拆分为Key-Value对,再按照":"
将Key-Value分开,返回Key值tf
对应的Value。命令示例如下。
将--返回21910。 select keyvalue("\;decreaseStore:1\;xcard:1\;isB2C:1\;tf:21910\;cart:1\;shipping:2\;pf:0\;market:shoes\;instPayAmount:0\;","\;",":","tf");
“\;decreaseStore:1\;xcard:1\;isB2C:1\;tf:21910\;cart:1\;shipping:2\;pf:0\;market:shoes\;instPayAmount:0\;”
按照“\;”
拆分后,得出的Key-Value对如下所示。
按照decreaseStore:1,xcard:1,isB2C:1,tf:21910,cart:1,shipping:2,pf:0,market:shoes,instPayAmount:0
":"
拆分后,结果如下所示。
返回Key为decreaseStore 1 xcard 1 isB2C 1 tf 21910 cart 1 shipping 2 pf 0 market shoes instPayAmount 0
tf
对应的Value值21910。
- 示例1:将字符串
LENGTH
- 命令格式
bigint length(string <str>)
- 命令说明
计算字符串str的长度。
- 参数说明
str:必填。STRING类型。如果输入为BIGINT、DOUBLE、DECIMAL或DATETIME类型,则会隐式转换为STRING类型后参与运算,其他类型会返回报错。
- 返回值说明
返回BIGINT类型。如果输入参数为NULL,则返回NULL。如果输入参数为非UTF-8编码格式,则返回-1。
- 示例
- 示例1:计算字符串
Tech on the net
的长度。命令示例如下。--返回15。 select length('Tech on the net');
- 示例2:输入参数为
null
。命令示例如下。--返回NULL。 select length(null);
- 示例1:计算字符串
LENGTHB
- 命令格式
bigint lengthb(string <str>)
- 命令说明
计算字符串str以字节为单位的长度。
- 参数说明
str:必填。STRING类型。如果输入为BIGINT、DOUBLE、DECIMAL或DATETIME类型,则会隐式转换为STRING类型后参与运算,其他类型会返回报错。
- 返回值说明
返回BIGINT类型。如果输入参数为NULL,则返回NULL。
- 示例
- 示例1:计算字符串
Tech on the net
以字节为单位的长度。命令示例如下。--返回15。 select lengthb('Tech on the net');
- 示例2:输入参数为
null
。命令示例如下。--返回NULL。 select lengthb(null);
- 示例1:计算字符串
MD5
- 命令格式
string md5(string <str>)
- 命令说明
计算字符串str的MD5值。
- 参数说明
str:必填。STRING类型。如果输入为BIGINT、DOUBLE、DECIMAL或DATETIME类型,则会隐式转换为STRING类型参与运算,其他类型会返回报错。
- 返回值说明
返回STRING类型。如果输入参数为NULL,则返回NULL。
- 示例
- 示例1:计算字符串
Tech on the net
的MD5值。命令示例如下。--返回ddc4c4796880633333d77a60fcda9af6。 select md5('Tech on the net');
- 示例2:输入参数为
null
。命令示例如下。--返回NULL。 select md5(null);
- 示例1:计算字符串
PARSE_URL
- 命令格式
string parse_url(string <url>, string <part>[, string <key>])
- 命令说明
对url解析后,按照part提取信息。
- 参数说明
- url:必填。URL链接。无效URL链接会返回报错。
- part:必填。STRING类型。取值包含:HOST、PATH、QUERY、REF、PROTOCOL、AUTHORITY、FILE和USERINFO,不区分大小写。不在该范围内的取值会返回报错。
- key:可选。当part取值为QUERY时,根据key值取出对应的Value值。
- 返回说明
返回STRING类型。url或part为NULL时,返回NULL。
- 示例
--返回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');
REGEXP_COUNT
- 命令格式
bigint regexp_count(string <source>, string <pattern>[, bigint <start_position>])
- 命令说明
计算source中从start_position位置开始,匹配指定pattern的子串数。
- 参数说明
- source:必填。STRING类型。待搜索的字符串,其他类型会返回报错。
- pattern:必填。STRING类型常量。待匹配的模型。pattern为空串或其他类型时返回报错。
- start_position:可选。BIGINT类型常量,必须大于0。其他类型或值小于等于0时返回报错。不指定时默认为1,表示从source的第一个字符开始匹配。
- 返回值说明
返回BIGINT类型。如果没有匹配成功,则返回0。如果任一输入参数为NULL,则返回NULL。
- 示例
- 示例1:计算
abababc
中从指定位置开始,匹配指定规则的子串数。命令示例如下。--返回1。 select regexp_count('abababc', 'a.c'); --返回2。 select regexp_count('abababc', '[[:alpha:]]{2}', 3);
- 示例2:任一输入为
null
。命令示例如下。--返回NULL。 select regexp_count('abababc', null);
- 示例1:计算
REGEXP_EXTRACT
- 命令格式
string regexp_extract(string <source>, string <pattern>[, bigint <occurrence>])
- 命令说明
将字符串source按照pattern的规则拆分为组,返回第occurrence个组的字符串。
- 参数说明
- source:必填。STRING类型,待拆分的字符串。
- pattern:必填。STRING类型常量。如果pattern为空串或pattern中没有分组,则返回报错。
- occurrence:可选。BIGINT类型常量,必须大于等于0,为其他类型或小于0时返回报错。不指定时默认为1,表示返回第一个组。如果occurrence等于0,则返回满足整个pattern的子串。
说明 数据以UTF-8格式保存。对于中文字符可以用对应的16进制编码表示,中文字符编码的范围是[\x{4e00},\x{9fa5}]。 - 返回值说明
返回STRING类型。如果任一输入参数为NULL,则返回NULL。
- 示例
- 示例1:将
foothebar
按照foo(.*?)(bar)
拆分。命令示例如下。--返回the。 select regexp_extract('foothebar', 'foo(.*?)(bar)'); --返回foothebar。 select regexp_extract('foothebar', 'foo(.*?)(bar)', 0);
- 示例2:将
8d99d8
按照8d(\\d+)d8
拆分。命令示例如下。--返回99。在MaxCompute客户端上提交正则计算的SQL,需要使用两个"\"作为转义字符。 select regexp_extract('8d99d8', '8d(\\d+)d8');
- 示例3:没有分组。错误命令示例如下:
select regexp_extract('foothebar', 'foothebar');
- 示例1:将
REGEXP_INSTR
- 命令格式
bigint regexp_instr(string <source>, string <pattern>[,bigint <start_position>[, bigint <occurrence>[, bigint <return_option>]]])
- 命令说明
计算字符串source从start_position开始,与pattern第occurrence次匹配的子串的起始或结束位置。
- 参数说明
- source:必填。STRING类型。源字符串。
- pattern:必填。STRING类型常量,pattern为空串时返回报错。
- start_position:可选。BIGINT类型常量。搜索的开始位置。不指定时默认值为1,其他类型或值小于等于0时返回报错。
- occurrence:可选。BIGINT类型常量。指定匹配次数,不指定时默认值为1,表示搜索第一次出现的位置。其他类型或值小于等于0时返回报错。
- return_option:可选。BIGINT类型常量。指定返回的位置。值为0或1,不指定时默认值为0,其他类型或不允许的值会返回报错0表示返回匹配的开始位置,1表示返回匹配的结束位置。
- 返回值说明
返回BIGINT类型。return_option指定匹配的子串在source中的开始或结束位置。如果任一输入参数为NULL,则返回NULL。
- 示例
- 示例1:计算字符串
i love www.taobao.com
从3
开始,与o[[:alpha:]]{1}
第2
次匹配的子串开始位置。命令示例如下。--返回14。 select regexp_instr('i love www.taobao.com', 'o[[:alpha:]]{1}', 3, 2);
- 示例2:计算字符串
i love www.taobao.com
从3
开始,与o[[:alpha:]]{1}
第2
次匹配的子串结束位置。命令示例如下。--返回16。 select regexp_instr('i love www.taobao.com', 'o[[:alpha:]]{1}', 3, 2, 1);
- 示例3:任一输入为
null
。命令示例如下。--返回NULL。 select regexp_instr('i love www.taobao.com', null, 3, 2);
- 示例1:计算字符串
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,表示将第occurrence次匹配的字符串替换为replace_string,为0时表示替换所有匹配的子串。为其他类型或小于0时,返回报错。默认值为0。
- 返回值说明
- 返回STRING类型。当引用不存在的组时,不进行替换。
- 如果任一输入参数为NULL,则返回NULL。
- 如果replace_string为NULL且pattern有匹配,则返回NULL。
- 如果replace_string为NULL但pattern不匹配,则返回原字符串。
- 示例
- 示例1:将
123.456.7890
字符串中与([[:digit:]]{3})\\.([[:digit:]]{3})\\.([[:digit:]]{4})
匹配的所有字符串替换为(\\1)\\2-\\3
。命令示例如下。--返回(123)456-7890。 select regexp_replace('123.456.7890', '([[:digit:]]{3})\\.([[:digit:]]{3})\\.([[:digit:]]{4})', '(\\1)\\2-\\3', 0);
- 示例2:将
abcd
字符串中与指定规则匹配的字符串进行替换。命令示例如下。--返回a b c d。 select regexp_replace('abcd', '(.)', '\\1 ', 0); --返回a bcd。 select regexp_replace('abcd', '(.)', '\\1 ', 1); --返回abcd。 select regexp_replace('abcd', '(.)', '\\2', 1);
- 示例3:任一输入为
null
。命令示例如下。--返回NULL。 select regexp_replace('abcd', '(.)', null, 0);
- 示例4:引用不存在的组。命令示例如下。
-- 因为pattern中只定义了一个组,引用的第二个组不存在。 -- 请避免这样使用,引用不存在的组的结果未定义。 regexp_replace("abcd", "(.*)(.)$", "\\2", 0) = "d" regexp_replace("abcd", "a", "\\1", 0) = "bcd" -- 因为在pattern中没有组的定义,所以\1引用了不存在的组, -- 请避免这样使用,引用不存在的组的结果未定义。
- 示例1:将
REGEXP_SUBSTR
- 命令格式
string regexp_substr(string <source>, string <pattern>[, bigint <start_position>[, bigint <occurrence>]])
- 命令说明
返回从start_position位置开始,source中第occurrence次匹配指定pattern的子串。
- 参数说明
- source:必填。STRING类型。待搜索的字符串。
- pattern:必填。STRING类型常量。待匹配的模型,pattern为空串时返回报错。
- start_position:可选。其他BIGINT常量,必须大于0。为其他类型或小于等于0时返回报错。不指定时默认为1,表示从source的第一个字符开始匹配。
- occurrence:可选。BIGINT常量,必须大于0。为其他类型或小于等于0时返回报错。不指定时默认为1,表示返回第一次匹配的子串。
- 返回值说明
返回STRING类型。如果任一输入参数为NULL,则返回NULL。没有匹配时也返回NULL。
- 示例
- 示例1:返回
I love aliyun very much
字符串中与指定规则匹配的字符串。命令示例如下。--返回aliyun。 select regexp_substr('I love aliyun very much', 'a[[:alpha:]]{5}'); --返回have。 select regexp_substr('I have 2 apples and 100 bucks!', '[[:blank:]][[:alnum:]]*', 1, 1); --返回2。 select regexp_substr('I have 2 apples and 100 bucks!', '[[:blank:]][[:alnum:]]*', 1, 2);
- 示例2:任一输入为
null
。命令示例如下。--返回NULL。 select regexp_substr('I love aliyun very much', null);
- 示例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大于片段个数,返回从start开始的子串。
- 除separator外,如果任一输入参数为NULL,则返回NULL。
- 示例
- 示例1:依照分隔符
,
拆分字符串a,b,c,d
,返回指定部分的子串。命令示例如下。--返回a。 select split_part('a,b,c,d', ',', 1); --返回a,b。 select split_part('a,b,c,d', ',', 1, 2);
- 示例2:start的值大于切分后实际的分段数。命令示例如下。
--返回空串。 select split_part('a,b,c,d', ',', 10);
- 示例3:separator不存在于str中。命令示例如下。
--返回a,b,c,d。 select split_part('a,b,c,d', ':', 1); --返回空串。 select split_part('a,b,c,d', ':', 2);
- 示例4:separator为空串。命令示例如下。
--返回a,b,c,d。 select split_part('a,b,c,d', '', 1);
- 示例5:end的值大于切分后实际的分段数。命令示例如下。
--返回b,c,d。 select split_part('a,b,c,d', ',', 2, 6);
- 示例6:除separator外,任一输入为
null
。命令示例如下。--返回NULL。 select split_part('a,b,c,d', ',', null);
- 示例1:依照分隔符
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。
- Hive兼容数据类型版本:当start_position为0时,与起始位置为1时相同。
- 1.0和2.0数据类型版本:当start_position为0时,返回NULL。
- length:可选。BIGINT类型,表示子串的长度值。值必须大于0,其他类型或值小于等于0返回报错。
- 返回值说明
返回STRING类型。如果任一输入参数为NULL,则返回NULL。
说明 当length被省略时,返回到str结尾的子串。 - 示例
- 示例1:返回字符串
abc
从指定位置开始,指定长度的子串。命令示例如下。--返回bc。 select substr('abc', 2); --返回b。 select substr('abc', 2, 1); --返回bc。 select substr('abc',-2 , 2);
- 示例2:任一输入为
null
。命令示例如下。--返回NULL。 select substr('abc', null);
- 示例1:返回字符串
SUBSTRING
- 命令格式
string substring(string|binary <str>, int <start_position>[, int <length>])
- 命令说明
返回字符串str从start_position开始,长度为length的子串。
- 参数说明
- str:必填。STRING或BINARY类型。如果输入为其他类型,则返回NULL或报错。
- start_position:必填。INT类型,起始位置为1。当start_position为0时,返回空串。当start_position为负数时,表示开始位置是从字符串的结尾往前倒数,最后一个字符是-1,依次往前倒数,其他类型会返回报错。
- length:可选。BIGINT类型,表示子串的长度值。值必须大于0,其他类型或值小于等于0返回报错。
- 返回值说明
返回STRING类型。如果任一输入参数为NULL,则返回NULL。
说明 当length
被省略时,返回到str
结尾的子串。 - 示例
- 示例1:返回字符串
abc
从指定位置开始,指定长度的子串。命令示例如下。--返回bc。 select substring('abc', 2); --返回b。 select substring('abc', 2, 1); --返回bc。 select substring('abc',-2,2); --返回ab。 select substring('abc',-3,2); --返回001。 substring(bin(2345), 2, 3);
- 示例2:任一输入为
null
。命令示例如下。--返回NULL。 select substring('abc', null, null);
- 示例1:返回字符串
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。
- 示例
- 示例1:将如下值转换为STRING类型表示。命令示例如下。
--返回字符串123。 select to_char(123); --返回字符串TRUE。 select to_char(true); --返回字符串1.23。 select to_char(1.23);
- 示例2:输入参数为
null
。命令示例如下。--返回NULL。 select to_char(null);
- 示例1:将如下值转换为STRING类型表示。命令示例如下。
TO_JSON
- 命令格式
to_json(<expr>)
- 命令说明
将给定的复杂类型expr,以JSON字符串格式输出。
- 参数说明
expr:必填。ARRAY、MAP、STRUCT复杂类型。说明 如果输入为STRUCT类型(
struct<key1:value1, key2:value2
):- 转换为JSON字符串时,key会全部转为小写。
value
如果为NULL,则不输出value
本组的数据。例如value2
为NULL,则key2:value2
不会输出到JSON字符串。
- 示例
- 示例1:将指定复杂类型以指定格式输出。命令示例如下。
--返回{"a":1,"b":2}。 select to_json(named_struct('a', 1, 'b', 2)); --返回{"time":"26/08/2015"}。 select to_json(named_struct('time', "26/08/2015")); --返回[{"a":1,"b":2}]。 select to_json(array(named_struct('a', 1, 'b', 2))); --返回{"a":{"b":1}}。 select to_json(map('a', named_struct('b', 1))); --返回{"a":1}。 select to_json(map('a', 1)); --返回[{"a":1}]。 select to_json(array((map('a', 1))));
- 示例2:输入为STRUCT类型的特殊情况。命令示例如下。
--返回{"a":"B"}。STRUCT类型转换为JSON字符串时,key会全部转为小写。 select to_json(named_struct("A", "B")); --返回{"k2":"v2"}。NULL值所在组的数据,不会输出到JSON字符串。 select to_json(named_struct("k1", cast(null as string), "k2", "v2"));
- 示例1:将指定复杂类型以指定格式输出。命令示例如下。
TOLOWER
- 命令格式
string tolower(string <source>)
- 命令说明
将字符串source中的大写字符转换为对应的小写字符。
- 参数说明
source:必填。STRING类型。如果输入为BIGINT、DOUBLE、DECIMAL或DATETIME类型,则会隐式转换为STRING类型后参与运算,其他类型会返回报错。
- 返回值说明
返回STRING类型。如果输入参数为NULL,则返回NULL。
- 示例
- 示例1:将字符串中的大写字符转换为小写字符。命令示例如下。
--返回abcd。 select tolower('aBcd'); --返回中国fighting。 select tolower('中国Fighting');
- 示例2:输入参数为
null
。命令示例如下。--返回NULL。 select tolower(null);
- 示例1:将字符串中的大写字符转换为小写字符。命令示例如下。
TOUPPER
- 命令格式
string toupper(string <source>)
- 命令说明
将字符串source中的小写字符转换为对应的大写字符。
- 参数说明
source:必填。STRING类型。如果输入为BIGINT、DOUBLE、DECIMAL或DATETIME类型,则会隐式转换为STRING类型后参与运算,其他类型会返回报错。
- 返回值说明
返回STRING类型。如果输入参数为NULL,则返回NULL。
- 示例
- 示例1:将字符串中的小写字符转换为大写字符。命令示例如下。
--返回ABCD。 select toupper('aBcd'); --返回中国FIGHTING。 select toupper('中国Fighting');
- 示例2:输入参数为
null
。命令示例如下。--返回NULL。 select toupper(null);
- 示例1:将字符串中的小写字符转换为大写字符。命令示例如下。
TRIM
- 命令格式
string trim(string <str>)
- 命令说明
去除字符串str的左右空格。
- 参数说明
str:必填。STRING类型。如果输入为BIGINT、DECIMAL、DOUBLE或DATETIME类型,则会隐式转换为STRING类型后参与运算,其他类型返回报错。
- 返回值说明
返回STRING类型。如果输入参数为NULL,则返回NULL。
- 示例
- 示例1:去除字符串
I love aliyun very much
的左右空格。命令示例如下。--返回字符串I love aliyun very much。 select trim(' I love aliyun very much ');
- 示例2:输入参数为
null
。命令示例如下。--返回NULL。 select trim(null);
- 示例1:去除字符串
LTRIM
- 命令格式
string ltrim(string <str>)
- 命令说明
去除字符串str的左边空格。
- 参数说明
str:必填。STRING类型。如果输入为BIGINT、DECIMAL、DOUBLE或DATETIME类型,则会隐式转换为STRING类型后参与运算,其他类型会返回报错。
- 返回值说明
返回为STRING类型。如果输入参数为NULL,则返回NULL。
- 示例
- 示例1:去除字符串
I love aliyun very much
的左边空格。命令示例如下。--返回字符串I love aliyun very much 。 select ltrim(' I love aliyun very much ');
- 示例2:输入参数为
null
。命令示例如下。--返回NULL。 select ltrim(null);
- 示例1:去除字符串
RTRIM
- 命令格式
string rtrim(string <str>)
- 命令说明
去除字符串str的右边空格。
- 参数说明
str:必填。STRING类型。如果输入为BIGINT、DECIMAL、DOUBLE或DATETIME类型,则会隐式转换为STRING类型后参与运算,其他类型会返回报错。
- 返回值说明
返回STRING类型。如果输入参数为NULL,则返回NULL。
- 示例
- 示例1:去除字符串
I love aliyun very much
的右边空格。命令示例如下。--返回字符串 I love aliyun very much。 select rtrim(' I love aliyun very much ');
- 示例2:输入参数为
null
。命令示例如下。--返回NULL。 select rtrim(null);
- 示例1:去除字符串
REPEAT
- 命令格式
string repeat(string <str>, bigint <n>)
- 命令说明
返回将str重复n次后的字符串。
- 参数说明
- str:必填。STRING类型。如果输入为BIGINT、DOUBLE、DECIMAL或DATETIME类型,则会隐式转换为STRING类型后参与运算,其他类型会返回报错。
- n:必填。BIGINT类型。长度不超过2 MB。如果为空,则返回报错。
- 返回值说明
返回STRING类型。如果任一输入为NULL,则返回NULL。
- 示例
- 示例1:将字符串
abc
重复5
次。命令示例如下。--返回abcabcabcabcabc。 select repeat('abc', 5);
- 示例2:任一输入为
null
。命令示例如下。--返回NULL。 select repeat('abc', null);
- 示例1:将字符串
REVERSE
- 命令格式
string reverse(string <str>)
- 命令说明
返回倒序字符串。
- 参数说明
str:必填。STRING类型。如果输入为BIGINT、DOUBLE、DECIMAL或DATETIME类型,则会隐式转换为STRING类型后参与运算,其他类型会返回报错。
- 返回值说明
返回STRING类型。如果输入参数为NULL,则返回NULL。
- 示例
- 示例1:返回字符串
I love aliyun very much
的倒序。命令示例如下。--返回字符串hcum yrev nuyila evol I。 select reverse('I love aliyun very much');
- 示例2:输入参数为
null
。命令示例如下。--返回NULL。 select reverse(null);
- 示例1:返回字符串
UNBASE64
- 命令格式
binary unbase64(string <str>)
- 命令说明
将BASE64编码格式字符串str转换为二进制表示格式。
- 参数说明
str:必填。STRING类型。待转换BASE64编码格式字符串。
- 返回值说明
返回BINARY类型。
- 示例
- 示例1:将字符串
YWxpYmFiYQ==
转换为二进制表示值。命令示例如下。--返回alibaba。 select unbase64('YWxpYmFiYQ==');
- 示例2:输入参数为
null
。命令示例如下。--返回NULL。 select ascii(null);
- 示例1:将字符串
MaxCompute 2.0扩展函数
CONCAT_WS
- 命令格式
string concat_ws(string <separator>, string <str1>, string <str2>[,...]) string concat_ws(string <separator>, array)
- 命令说明
返回将参数中的所有字符串按照指定的分隔符连接在一起的结果。此函数为MaxCompute 2.0扩展函数。
- 参数说明
- separator:必填。STRING类型的分隔符。如果不指定,则返回报错。
- str1、str2:至少要指定2个字符串。STRING类型。如果输入为BIGINT、DECIMAL、DOUBLE或DATETIME类型,则会隐式转换为STRING类型后参与运算,其他类型会返回报错。
- 返回值说明
返回STRING类型。如果没有输入参数或任一输入参数为NULL,则返回NULL。
- 示例
- 示例1:将字符串
I love
和you very much
通过:
连接。命令示例如下。
---返回name:hanmeimei。 select concat_ws(':','name','hanmeimei');
- 示例2:任一输入为
null
。命令示例如下。--返回NULL。 select concat_ws(':','avg',null,'34');
- 示例1:将字符串
JSON_TUPLE
- 命令格式
string json_tuple(string <json>, string <key1>, string <key2>,...)
- 命令说明
用于一个标准的JSON字符串中,按照输入的一组键
(key1,key2,...)
抽取各个键指定的字符串。此函数为MaxCompute 2.0扩展函数。 - 参数说明
- json:必填。STRING类型,标准的JSON格式字符串。
- key:必填。STRING类型,用于描述在JSON中的
path
,一次可输入多个,不能以美元符号($)开头。
- 返回值
返回STRING类型。
说明- 如果JSON为空或者为非法的JSON格式,返回NULL。
- 如果键Key为空或者不合法(JSON中不存在)返回NULL。
- 如果JSON合法,键Key也存在,则返回对应字符串。
- 支持包含中文的JSON数据解析。
- 支持多层嵌套的JSON数据解析。
- 支持包含多重嵌套的数组的JSON数据解析。
- 解析行为和设置了
set odps.sql.udf.getjsonobj.new=true;
后的GET_JSON_OBJECT的行为保持一致。在需要对同一个JSON字符串多次解析的情况下,相比于多次调用GET_JSON_OBJECT,JSON_TUPLE可以一次输入多个Key,且JSON字符串只被解析一次,效率更高。 - JSON_TUPLE是UDTF,在需要选取其他列时应配合LATERAL VIEW使用。
- 示例
假设表school的值如下。
Table:school +------------+------------+ | Id | json | +------------+------------+ | 1 | { "校名": "湖畔大学", "地址":"杭州", "SchoolRank": "00", "Class1":{ "Student":[{ "studentId":1, "scoreRankIn3Year":[1,2,[3,2,6]] }, { "studentId":2, "scoreRankIn3Year":[2,3,[4,3,1]] }]} } | +------------+------------+
- 示例1:提取JSON对象信息。命令示例如下。
select json_tuple(school.json,"SchoolRank","Class1") as (item0,item1) from school; --等效于如下语句。 select get_json_object(school.json,"$.SchoolRank") item0,get_json_object(school.json,"$.Class1") item1 from school; --返回结果如下。 +-------+-------+ | item0 | item1 | +-------+-------+ | 00 | {"Student":[{"studentId":1,"scoreRankIn3Year":[1,2,[3,2,6]]},{"studentId":2,"scoreRankIn3Year":[2,3,[4,3,1]]}]} | +-------+-------+
- 示例2:支持解析包含中文的JSON数据。命令示例如下。
select json_tuple(school.json,"校名","地址") as (item0,item1) from school; --返回结果如下。 +-------+-------+ | item0 | item1 | +-------+-------+ | 湖畔大学 | 杭州 | +-------+-------+
- 示例3:支持解析多层嵌套的JSON数据。命令示例如下。
select sc.Id, q.item0, q.item1 from school sc lateral view json_tuple(sc.json,"Class1.Student[*].studentId","Class1.Student[0].scoreRankIn3Year") q as item0,item1; --返回结果如下。 +------------+-------+-------+ | id | item0 | item1 | +------------+-------+-------+ | 1 | [1,2] | [1,2,[3,2,6]] | +------------+-------+-------+
- 示例4:支持解析包含多重嵌套数组的JSON数据。命令示例如下。
select sc.Id, q.item0, q.item1 from school sc lateral view json_tuple(sc.json,"Class1.Student[0].scoreRankIn3Year[2]","Class1.Student[0].scoreRankIn3Year[2][1]") q as item0,item1; --返回结果如下。 +------------+-------+-------+ | id | item0 | item1 | +------------+-------+-------+ | 1 | [3,2,6] | 2 | +------------+-------+-------+
- 示例1:提取JSON对象信息。命令示例如下。
LPAD
- 命令格式
string lpad(string <str1>, int <length>, string <str2>)
- 命令说明
用字符串str2将字符串str1向左补足到length位。此函数为MaxCompute 2.0扩展函数。
- 参数说明
- str1:必填。STRING类型。待向左补位的字符串。
- length:必填。INT类型。向左补位位数。
- str2:必填。用于补位的字符串。
- 返回值说明
返回STRING类型。如果length小于str1的位数,则返回str1从左开始截取length位的字符串。如果length为0,则返回空串。
如果没有输入参数或任一输入参数为NULL,则返回NULL。
- 示例
- 示例1:用字符串
12
将字符串abcdefgh
向左补足到10位。命令示例如下。--返回12abcdefgh。 select lpad('abcdefgh', 10, '12');
- 示例2:用字符串
12
将字符串abcdefgh
向左补足到5位。命令示例如下。--返回abcde。 select lpad('abcdefgh', 5, '12');
- 示例3:length为0。命令示例如下。
--返回空串。 select lpad('abcdefgh' ,0, '12');
- 示例4:任一输入为
null
。命令示例如下。--返回NULL。 select lpad(null ,0, '12');
- 示例1:用字符串
RPAD
- 命令格式
string rpad(string <str1>, int <length>, string <str2>)
- 命令说明
用字符串str2将字符串str1向右补足到length位。此函数为MaxCompute 2.0扩展函数。
- 参数说明
- str1:必填。STRING类型。待向右补位的字符串。
- length:必填。INT类型。向右补位位数。
- str2:必填。用于补位的字符串。
- 返回值说明
返回STRING类型。如果length小于str1的位数,则返回str1从左开始截取length位的字符串。如果length为0,则返回空串。
如果没有输入参数或任一输入参数为NULL,则返回NULL。
- 示例
- 示例1:用字符串
12
将字符串abcdefgh
向右补足到10位。命令示例如下。--返回abcdefgh12右。 select rpad('abcdefgh', 10, '12');
- 示例2:用字符串
12
将字符串abcdefgh
向右补足到5位。命令示例如下。--返回abcde。 select rpad('abcdefgh', 5, '12');
- 示例3:length为0。命令示例如下。
--返回空串。 select rpad('abcdefgh' ,0, '12');
- 示例4:任一输入为
null
。命令示例如下。--返回NULL。 select rpad(null ,0, '12');
- 示例1:用字符串
REPLACE
- 命令格式
string replace(string <str>, string <old>, string <new>)
- 命令说明
用new字符串替换str字符串中与old字符串完全重合的部分并返回替换后的str。如果没有重合的字符串,返回原str。此函数为MaxCompute 2.0扩展函数。
- 参数说明
- str:必填。STRING类型。待替换的字符串。
- old:必填。待比较的字符串。
- new:必填。替换后的字符串。
- 返回值说明
返回STRING类型。如果任一输入参数为NULL,则返回NULL。
- 示例
- 示例1:用字符串
12
替换字符串ababab
中与字符串abab
完全重合的部分。命令示例如下。--返回12ab。 select replace('ababab','abab','12');
- 示例2:任一输入为
null
。命令示例如下。--返回NULL。 select replace('123abab456ab',null,'abab');
- 示例1:用字符串
SOUNDEX
- 命令格式
string soundex(string <str>)
- 命令说明
将普通字符串转换为SOUNDEX字符串。
- 参数说明
str:必填。STRING类型。待转换的字符串。此函数为MaxCompute 2.0扩展函数。
- 返回值说明
返回STRING类型。如果输入参数为NULL,则返回NULL。
- 示例
- 示例1:将字符串
hello
转换为SOUNDEX字符串。命令示例如下。--返回H400。 select soundex('hello');
- 示例2:输入参数为
null
。命令示例如下。--返回NULL。 select soundex(null);
- 示例1:将字符串
SUBSTRING_INDEX
- 命令格式
string substring_index(string <str>, string <separator>, int <count>)
- 命令说明
截取字符串str第count个分隔符之前的字符串。如果count为正,则从左边开始截取。如果count为负,则从右边开始截取。此函数为MaxCompute 2.0扩展函数。
- 参数说明
- str:必填。STRING类型。待截取的字符串。
- separator:必填。STRING类型的分隔符。
- count:必填。INT类型。指定分隔符位置。
- 返回值说明
返回STRING类型。如果任一输入参数为NULL,则返回NULL。
- 示例
- 示例1:截取字符串
https://help.aliyun.com
。命令示例如下。--返回https://help.aliyun。 select substring_index('https://help.aliyun.com', '.', 2); --返回aliyun.com。 select substring_index('https://help.aliyun.com', '.', -2);
- 示例2:任一输入为
null
。命令示例如下。--返回NULL。 select substring_index('https://help.aliyun.com', null, 2);
- 示例1:截取字符串
TRANSLATE
- 命令格式
string translate(string|varchar <str1>, string|varchar <str2>, string|varchar <str3>)
- 命令说明
将str1出现在str2中的字符串替换成str3字符串。无匹配则不替换。此函数为MaxCompute 2.0扩展函数。
- 返回值说明
返回STRING类型。如果任一输入参数为NULL,则返回NULL。
- 示例
- 示例1:将字符串
MaxComputer
出现在puter
中的字符串替换成字符串pute
。命令示例如下。--返回MaxCompute。 select translate('MaxComputer','puter','pute');
- 示例2:任一输入为
null
。命令示例如下。--返回NULL。 select translate('MaxComputer','puter',null);
- 示例1:将字符串
URL_ENCODE
- 命令格式
string url_encode(string <input>[, string <encoding>])
- 命令说明
将输入字符串编码为
application/x-www-form-urlencoded MIME
格式。编码格式如下:- a~z、A~Z保持不变。
- 英文句点(.)、短划线(-)、星号(*)和下划线(_)保持不变。
- 空格转为加号(+)。
- 其余字符根据指定的encoding转为字节值,然后将每个字节值表示为
%xy
的格式,xy
是该字符的十六进制表示方式。
- 参数说明
- input:必填。STRING类型。要输入的字符串。
- encoding:可选。指定编码格式,支持GBK或UTF-8等标准编码格式,不输入默认为UTF-8。
- 返回值说明
返回STRING类型。如果输入参数为NULL,则返回NULL。
- 示例
--返回%E7%A4%BA%E4%BE%8Bfor+url_encode%3A%2F%2F+%28fdsf%29。 select url_encode('示例for url_encode:// (fdsf)'); --返回Example+for+url_encode+%3A%2F%2F+dsf%28fasfs%29。 select url_encode('Example for url_encode:// dsf(fasfs)', 'GBK');
URL_DECODE
- 命令格式
string url_decode(string <input>[, string <encoding>])
- 命令说明
将输入字符串从
application/x-www-form-urlencoded MIME
格式转为常规字符串,是url_encode
的逆过程。编码规则如下:- a~z、A~Z保持不变。
- 英文句点(.)、短划线(-)、星号(*)和下划线(_)保持不变。
- 加号(+)转为空格。
%xy
格式的序列转为对应的字节值,连续的字节值根据输入的encoding名称解码为对应的字符串。- 其余的字符保持不变。
- 参数说明
- input:必填。STRING类型。要输入的字符串。
- encoding:可选。指定编码格式,支持GBK或UTF-8等标准编码格式,不输入默认为UTF-8。
- 返回值说明
返回STRING类型UTF-8编码的字符串。如果输入参数为NULL,则返回NULL。
- 示例
--返回示例for url_decode:// (fdsf)。 select url_decode('%E7%A4%BA%E4%BE%8Bfor+url_decode%3A%2F%2F+%28fdsf%29'); --返回Example for URL_DECODE:// dsf(fasfs)。 select url_decode('Example+for+url_decode+%3A%2F%2F+dsf%28fasfs%29', 'GBK');
在文档使用中是否遇到以下问题
更多建议
匿名提交