CHAR_MATCHCOUNT

命令格式如下:
bigint char_matchcount(string str1, string str2)

命令说明如下:

该函数用于计算str1中有多少个字符出现在str2中。

参数说明:
  • str1,str2:String类型,必须为有效的UTF-8字符串,如果对比中发现有无效字符则函数返回负值。
  • bigint:返回值为bigint类型。任一输入为NULL返回NULL。
示例如下:
char_matchcount('abd','aabc') = 2
-- str1中得两个字符串'a','b'在str2中出现过

CHR

命令格式如下:
string chr(bigint ascii)

命令说明如下:

该函数用于将给定ASCII码ascii转换成字符。

参数说明:
  • ascii:Bigint类型ASCII值,若输入为String类型或Double类型或Decimal类型会隐式转换到Bigint类型后参与运算,其它类型抛异常。
  • String:返回值为String类型。参数范围是0~255,超过此范围会引发异常。输入值为NULL返回NULL。

CONCAT

命令格式如下:
string concat(string a, string b...)

命令说明如下:

该函数的返回值是将参数中的所有字符串连接在一起的结果。

参数说明:
  • a,b等为String类型,若输入为Bigint,Double,Decimal或者Datetime类型会隐式转换为String后参与运算,其它类型报异常。
  • 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抽取指定的字符串。

参数说明:
  • json: String类型,标准的json格式字符串。
  • path:String类型,用于描述在json中的path,以$开头。关于新实现中json path的说明,请参见:JsonPath,$表示根节点, (.)表示child,[number]表示数组下标,对于数组,格式为key[sub1][sub2][sub3]……, [*]返回整个数组,*不支持转义。
  • String:返回值为String类型。
说明
  • 如果json为空或者非法的json格式,返回NULL。
  • 如果path为空或者不合法(json中不存在)返回NULL。
  • 如果json合法,path也存在则返回对应字符串。
示例一如下:
+----+
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对象中的信息:
odps> SELECT get_json_object(src_json.json, '$.owner') FROM src_json;
amy
odps> SELECT get_json_object(src_json.json, '$.store.fruit\[0]') FROM src_json;
{"weight":8,"type":"apple"}
odps> SELECT get_json_object(src_json.json, '$.non_exist_key') FROM src_json;
NULL
示例二如下:
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"

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:返回值为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

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类型,输入为NULL返回NULL。空字符串则可以被认为属于任何字符集。
  • from_encoding,to_encoding:String类型,源及目标字符集。输入为NULL返回NULL。
  • boolean:返回值为Boolean类型,如果str能够成功转换,则返回true,否则返回false。
示例如下:
is_encoding('测试', 'utf-8', 'gbk') = true
is_encoding('測試', 'utf-8', 'gbk') = true
-- gbk字库中有这两个繁体字
is_encoding('測試', 'utf-8', 'gb2312') = false
-- gb2312库中不包括这两个字

KEYVALUE

命令格式如下:
KEYVALUE(STRING srcStr,STRING split1,STRING split2, STRING key)
KEYVALUE(STRING srcStr,STRING key) //split1 = ";",split2 = ":"

命令说明如下:

将srcStr(源字符串)按split1分成key-value对,按split2将key-value对分开,返回key所对应的value。

参数说明:
  • srcStr输入待拆分的字符串。
  • key:String类型。源字符串按照split1和split2拆分后,根据该key值的指定,返回其对应的value。
  • split1,split2:用来作为分隔符的字符串,按照指定的这两个分隔符拆分源字符串。如果表达式中没有指定这两项,默认split1为(;), split2为(:)。当某个被split1拆分后的字符串中有多个split2时,返回结果未定义。
返回值:
  • String 类型;
  • Split1或split2为NULL时,返回NULL。
  • srcStr,key为NULL或者没有匹配的key时,返回NULL。
  • 如果有多个key-value匹配,返回第一个匹配上的key对应的value。
示例一:
keyvalue('0:1\;1:2', 1) = '2'
说明
源字符串为“0:1\;1:2”,因为没有指定split1和split2,默认split1为";",split2为“:”。

经过split1拆分后,key-value对为0:1\,1:2。

经过split2拆分后变成:
0 1/  
1 2
返回key为1所对应的value值2。
示例二:
keyvalue("\;decreaseStore:1\;xcard:1\;isB2C:1\;tf:21910\;cart:1\;shipping:2\;pf:0\;market:shoes\;instPayAmount:0\;","\;",":","tf") = "21910" value:21910。
说明
源字符串如下所示:
“\;decreaseStore:1\;xcard:1\;isB2C:1\;tf:21910\;cart:1\;shipping:2\;pf:0\;market:shoes\;instPayAmount:0\;”
按照split1“\;”拆分后,得出的key-value对如下所示:
decreaseStore:1,xcard:1,isB2C:1,tf:21910,cart:1,shipping:2,pf:0,market:shoes,instPayAmount:0 
按照split2":"拆分后,结果如下所示:
decreaseStore 1  
 xcard 1  
 isB2C 1  
 tf 21910  
 cart 1  
 shipping 2  
 pf 0  
 market shoes  
 instPayAmount 0

key值为tf,返回其对应的value:21910。

LENGTH

命令格式如下:
bigint length(string str)

命令说明如下:

返回字符串str的长度。

参数说明:
  • str:String类型,若输入为Bigint,Double,Decimal或者Datetime类型会隐式转换为String后参与运算,其它类型报异常。
  • bigint:返回值为Bigint类型。若str是NULL返回NULL。如果str非UTF-8编码格式,返回-1。
示例如下:
length('hi! 中国') = 6

LENGTHB

命令格式如下:
bigint lengthb(string str)

命令说明如下:

返回字符串str的以字节为单位的长度。

参数说明:

  • str:String类型,若输入为Bigint,Double,Decimal或者Datetime类型会隐式转换为String后参与运算,其它类型报异常。
  • bigint:返回值为Bigint类型。若str是NULL返回NULL。
示例如下:
lengthb('hi! 中国') = 10

MD5

命令格式如下:
string md5(string value)

命令说明如下:

计算输入字符串value的md5值。

参数说明:

  • value:String类型,如果输入类型是Bigint,Double,Decimal或者Datetime会隐式转换成String类型参与运算,其它类型报异常。输入为NULL,返回NULL。
  • String:返回值为String类型。

REGEXP_EXTRACT

命令格式如下:
string regexp_extract(string source, string pattern[, bigint occurrence])

命令说明如下:

将字符串source按照pattern正则表达式的规则拆分,返回第occurrence个group的字符。

参数说明:
  • source:String类型,待搜索的字符串。
  • pattern:String类型常量,pattern为空串时抛异常,pattern中如果没有指定group,抛异常。
  • occurrence:Bigint类型常量,必须 >=0,其它类型或小于0时抛异常,不指定时默认为1,表示返回第一个group。若occurrence = 0,返回满足整个pattern的子串。
  • String:返回值为String类型,任一输入为NULL返回NULL。
示例如下:
regexp_extract('foothebar', 'foo(.*?)(bar)', 1) = the
regexp_extract('foothebar', 'foo(.*?)(bar)', 2) = bar
regexp_extract('foothebar', 'foo(.*?)(bar)', 0) = foothebar
regexp_extract('8d99d8', '8d(\\d+)d8') = 99
-- 如果是在MaxCompute客户端上提交正则计算的SQL,需要使用两个"\"作为转移字符
regexp_extract('foothebar', 'foothebar')
-- 异常返回,pattern中没有指定group

REGEXP_INSTR

命令格式如下
bigint regexp_instr(string source, string pattern[,
bigint start_position[, bigint nth_occurrence[, bigint return_option]])

命令说明如下:

返回字符串source从start_position开始,和pattern第n次(nth_occurrence)匹配的子串的起始/结束位置。任一输入参数为NULL时返回NULL。

参数说明:
  • source:String类型,待搜索的字符串。
  • pattern:String类型常量,pattern为空串时抛异常。
  • start_position:Bigint类型常量,搜索的开始位置。不指定时默认值为1,其它类型或小于等于0的值会抛异常。
  • nth_occurrence:Bigint类型常量,不指定时默认值为1,表示搜索第一次出现的位置。小于等于0或者其它类型抛异常。
  • return_option:Bigint类型常量,值为0或1,其它类型或不允许的值会抛异常。0表示返回匹配的开始位置,1表示返回匹配的结束位置。
  • bigint:返回值为Bigint类型。return_option指定的类型返回匹配的子串在source中的开始或结束位置。
示例如下:
regexp_instr("i love www.taobao.com", "o[[:alpha:]]{1}", 3, 2) = 14

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:返回值为String类型,当引用不存在的组时,不进行替换。当输入source,pattern,occurrence 参数为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引用了不存在的组,
-- 请避免这样使用,引用不存在的组的结果未定义。

REGEXP_SUBSTR

命令格式如下:
string regexp_substr(string source, string pattern[, bigint start_position[, bigint nth_occurrence]])

命令说明如下:

从start_position位置开始,source中第nth_occurrence次匹配指定模式pattern的子串。

参数说明:
  • source:String类型,搜索的字符串。
  • pattern:String类型常量,要匹配的模型,pattern为空串时抛异常。
  • start_position:Bigint常量,必须大于0。其它类型或小于等于0时抛异常,不指定时默认为1,表示从 source的第一个字符开始匹配。不指定时默认为1,表示从source的第一个字符开始匹配。
  • nth_occurrence:Bigint常量,必须大于0,其它类型或小于等于0时抛异常。不指定时默认为1,表示返回第一次匹配的子串。不指定时默认为1,表示返回第一次匹配的子串。
  • String:返回值为String类型。任一输入参数为NULL返回NULL。没有匹配时返回NULL。
示例如下:
regexp_substr ("I love aliyun very much", "a[[:alpha:]]{5}") = "aliyun"
regexp_substr('I have 2 apples and 100 bucks!', '[[:blank:]][[:alnum:]]*', 1, 1) = " have"
regexp_substr('I have 2 apples and 100 bucks!', '[[:blank:]][[:alnum:]]*', 1, 2) = " 2"

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:返回值为Bigint类型。没有匹配时返回0。任一输入参数为NULL返回NULL。
示例如下:
regexp_count('abababc', 'a.c') = 1
regexp_count('abcde', '[[:alpha:]]{2}', 3) = 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:返回值为String类型。若任意参数为NULL,返回NULL;若separator为空串,返回原字符串str。
说明
  • 如果separator不存在于str中,且start指定为1,返回整个str。若输入为空串,输出为空串。
  • 如果start的值大于切分后实际的分段数,例如:字符串拆分完有6个片段,但start大于6,返回空串。
  • 若end大于片段个数,按片段个数处理。
示例如下:
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为负数时表示开始位置是从字符串的结尾往前倒数,最后一个字符是 -1,往前数依次就是-2,-3…,其它类型抛异常。
  • length:Bigint类型,大于0,其它类型或小于等于 0 抛异常。子串的长度。
  • String:返回值为String类型。若任一输入为NULL,返回NULL。
说明
当length被省略时,返回到str结尾的子串。
示例如下:
substr("abc", 2) = "bc"
substr("abc", 2, 1) = "b"
substr("abc",-2,2)="bc"
substr("abc",-3)="abc"

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为负数时表示开始位置是从字符串的结尾往前倒数,最后一个字符是-1,往前数依次就是-2,-3…,其它类型抛异常。
  • length:Bigint类型,大于0,其它类型或小于等于0抛异常。子串的长度。
  • String:返回值为String类型。若任一输入为NULL,返回NULL。
说明
当length被省略时,返回到str结尾的子串。
示例如下
substring('abc', 2) = 'bc'
substring('abc', 2, 1) ='"b'
substring('abc',-2,2)='bc'
substring('abc',-3,2)='ab'
substring(BIN(2345),2,3)='001'

TOLOWER

命令格式如下:
string tolower(string source)

命令说明如下:

输出英文字符串source对应的小写字符串。

参数说明:
  • source:String类型,若输入为Bigint,Double,Decimal或者Datetime类型会隐式转换为String后参与运算,其它类型报异常。
  • String:返回值为String类型。输入为NULL时返回NULL。
示例如下:
tolower("aBcd") = "abcd"
tolower("哈哈Cd") = "哈哈cd"

TOUPPER

命令格式如下:
string toupper(string source)

命令说明如下:

输出英文字符source串对应的大写字符串。

参数说明:
  • source:String类型,若输入为Bigint,Double,Decimal或者Datetime类型会隐式转换为String后参与运算,其它类型报异常。
  • 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类型输入,其它类型抛异常。对 Datetime类型的格式化输出请参考另一同名函数TO_CHAR 。
  • String:返回值为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:返回值为String类型。输入为NULL时返回NULL。

LTRIM

命令格式如下:
string ltrim(string str)

命令说明如下:

将输入的字符串str去除左边空格。

参数说明:
  • str:String类型,若输入为Bigint,Decimal,Double或者Datetime类型会隐式转换为String后参与运算,其它类型报异常。
  • String:返回值为String类型。输入为NULL时返回NULL。
示例如下:
select ltrim(' abc ') from dual; 
返回: 
+-----+
| _c0 |
+-----+
| abc |
+-----+

RTRIM

命令格式如下:
string rtrim(string str)

命令说明如下:

将输入的字符串str去除右边空格。

参数说明:
  • str:String类型,若输入为Bigint,Decimal,Double或者Datetime类型会隐式转换为String后参与运算,其它类型报异常。
  • String:返回值为String类型。输入为NULL时返回NULL。
示例如下:
select rtrim('a abc ') from dual; 
返回: 
+-----+
| _c0 |
+-----+
| a abc |
+-----+

REVERSE

命令格式如下:
STRING REVERSE(string str)

命令说明如下:

返回倒序字符串。

参数说明:
  • str:String类型,若输入为Bigint,Double,Decimal或Datetime类型会隐式转换为String后参与运算,其它类型报异常。
  • String:返回值为String类型。输入为NULL时返回NULL。
示例如下:
select reverse('abcedfg') from dual;
返回: 
+-----+
| _c0 |
+-----+
| gfdecba |
+-----+

SPACE

命令格式如下:
STRING SPACE(bigint n)

命令说明如下:

空格字符串函数,返回长度为n的字符串。

参数说明:
  • n: Bigint类型。长度不超过2M。如果为空,则抛异常。
  • String:返回值为String类型。
示例如下:
select length(space(10)) from dual; ----返回10。 
select space(400000000000) from dual; ----报错,长度超过2M。

REPEAT

命令格式如下:
STRING REPEAT(string str, bigint n)

命令说明如下:

返回重复n次后的str字符串。

参数说明:
  • str:String类型,若输入为Bigint,Double,Decimal或Datetime类型会隐式转换为String后参与运算,其它类型报异常。
  • n: Bigint类型。长度不超过2M。如果为空,则抛异常。
  • String:返回值为String类型。
示例如下:
select repeat('abc',5) from lxw_dual; 
返回:abcabcabcabcabc

ASCII

命令格式如下:
Bigint ASCII(string str)

命令说明如下:

返回字符串str第一个字符的ascii码。

参数说明:
  • str:String类型,若输入为Bigint,Double,Decimal或Datetime类型会隐式转换为String后参与运算,其它类型报异常。
  • Bigint:返回值为Bigint类型。
示例如下:
select ascii('abcde') from dual;
返回值:97

MaxCompute2.0扩展函数

升级到MaxCompute2.0后,产品扩展部分数学函数,新函数若用到新数据类型时,在使用新函数的SQL前,需要加一个set语句:
set odps.sql.type.system.odps2=true;
说明
请在用到该函数的SQL语句前加set odps.sql.type.system.odps2=true;,并与SQL一起提交运行,以便正常使用新数据类型。

下文将为您详细介绍新扩展的字符串函数。

CONCAT_WS

命令格式如下:
string concat_ws(string SEP, string a, string b...)
string concat_ws(string SEP, array)
说明
请在用到该函数的SQL语句前加set odps.sql.type.system.odps2=true;,并与SQL一起提交运行,以便正常使用新数据类型。

命令说明如下:

返回值是将参数中的所有字符串安装指定的分隔符连接在一起的结果。

参数说明:
  • SEP:String类型的分隔符,若不指定,返回的值异常。
  • a/b等:String类型,若输入为Bigint,Decimal,Double或Datetime类型会隐式转换为String后参与运算,其它类型报异常。

返回值:

返回String类型。如果没有参数或者某个参数为NULL,结果均返回NULL。

示例如下:
concat_ws(':','name','hanmeimei')='name:hanmeimei'
concat_ws(':','avg',null,'34')=null

LPAD

命令格式如下:
string lpad(string a, int len, string b)
说明
请在用到该函数的SQL语句前加set odps.sql.type.system.odps2=true;,并与SQL一起提交运行,以便正常使用新数据类型。

命令说明如下:

用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)
说明
请在用到该函数的SQL语句前加set odps.sql.type.system.odps2=true;,并与SQL一起提交运行,以便正常使用新数据类型。

命令说明如下:

用b字符串将a字符串向右补足到len位。
说明

需在使用该函数的SQL语句前加语句set odps.sql.type.system.odps2=true,否则会报错。

参数说明:
  • 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)
说明
请在用到该函数的SQL语句前加set odps.sql.type.system.odps2=true;,并与SQL一起提交运行,以便正常使用新数据类型。

命令说明如下:

用NEW字符串替换a字符串中与OLD字符串完全重合的部分并返回a。

参数说明:

参数说明:参数都为String类型。

返回值:

返回String类型,若某个参数为null,则返回null。

示例如下:
replace('ababab','abab','12')='12ab'
replace('ababab','cdf','123')='ababab'
replace('123abab456ab',null,'abab')=null

SOUNDEX

命令格式如下:
string soundex(string a)
说明
请在用到该函数的SQL语句前加set odps.sql.type.system.odps2=true;,并与SQL一起提交运行,以便正常使用新数据类型。

命令说明如下:

将普通字符串转换成soundex字符串。

参数说明:a为String类型。

返回值:返回String类型,若输入为null,则返回null。

示例如下:
soundex('hello')='H400'

SUBSTRING_INDEX

命令格式如下:
string substring_index(string a, string SEP, int count))
说明
请在用到该函数的SQL语句前加set odps.sql.type.system.odps2=true;,并与SQL一起提交运行,以便正常使用新数据类型。

命令说明如下:

截取字符串a第count分隔符之前的字符串,如count为正则从左边开始截取,如果为负则从右边开始截取。

参数说明:a/sep为string类型,count为int类型。

返回值:

返回String类型,若输入为null,则返回null。

示例如下:
substring_index('https://help.aliyun.com', '.', 2)='https://help.aliyun'
substring_index('https://help.aliyun.com', '.', -2)='aliyun.com'
substring_index('https://help.aliyun.com', null, 2)=null

S28新函数

TRANSLATE

命令格式如下:
string translate(string|varchar str1, string|varchar str2, string|varchar str3)
说明
请在用到该函数的SQL语句前加set odps.sql.type.system.odps2=true;,并与SQL一起提交运行,以便正常使用新数据类型。

命令说明如下:

将str1出现在str2中的字符串替换成str3中的字符串。

返回值:

返回string类型,若某个参数为null,则返回null。

示例如下:
translate('MaxComputer','puter','pute')='MaxCompute'
translate('aaa','b','c')='aaa'
translate('MaxComputer','puter',null)=null
说明

若涉及新数据类型(varchar)请在用到该函数的SQL语句前加set odps.sql.type.system.odps2=true;,并与SQL一起提交运行,以便正常使用新数据类型。

URL_DECODE

命令格式如下:
STRING URL_DECODE(STRING input[, STRING encoding])

命令说明如下:

将输入字符串从application/x-www-form-urlencoded MIME格式转为正常字符串,是url_encoding的逆过程。
  • a-z、A-Z保持不变。
  • (.)、(-)、(*)和(_)保持不变。
  • (+)转为空格。
  • %xy格式的序列转为对应的字节值,连续的字节值根据输入的encoding名称解成对应的字符串。
  • 其余的字符保持不变。
  • 函数最终的返回值是UTF-8编码的字符串。
参数说明:
  • input:要输入的字符串。
  • encoding:指定的编码格式,不输入则默认为UTF-8格式。

返回值:

返回string类型,若input为null,则返回null。

示例如下:
url_decode('%E7%A4%BA%E4%BE%8Bfor+url_encode%3A%2F%2F+%28fdsf%29')= "示例for url_encode:// (fdsf)"
url_decode('Exaple+for+url_encode+%3A%2F%2F+dsf%28fasfs%29', 'GBK') = "Exaple for url_encode :// dsf(fasfs)"

URL_ENCODE

命令格式如下:
STRING URL_ENCODE(STRING input[, STRING encoding])

命令说明如下:

将输入字符串编码为application/x-www-form-urlencoded MIME格式。
  • a-z、A-Z保持不变。
  • (.)、(-)、(*)和(_)保持不变。
  • 空格转为(+)。
  • 其余字符根据指定的encoding转为字节值,encoding不输入则默认为UTF-8。然后将每个字节值表示为%xy的格式,xy是该字符值的十六进制表示方式。
参数说明:
  • input:要输入的字符串。
  • encoding:指定的编码格式,不输入则默认为UTF-8格式。

返回值:

返回string类型,若input为null,则返回null。

示例如下:
url_encode('示例for url_encode:// (fdsf)') = "%E7%A4%BA%E4%BE%8Bfor+url_encode%3A%2F%2F+%28fdsf%29"

url_encode('Exaple for url_encode :// dsf(fasfs)', 'GBK') = "Exaple+for+url_encode+%3A%2F%2F+dsf%28fasfs%29"