本文为您介绍MaxCompute支持的CHAR_MATCHCOUNT、CHR、CONCAT、GET_JSON_OBJECT、INSTR、IS_ENCODING等字符串函数。

CHAR_MATCHCOUNT

  • 命令格式
    bigint char_matchcount(string str1, string str2)
  • 命令说明

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

  • 参数说明

    str1str2:STRING类型,必须为有效的UTF-8字符串。如果对比中发现有无效字符,则函数返回负值。

  • 返回值说明

    返回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类型。参数范围是0~255,超过此范围会引发异常。如果输入参数为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格式日志数据,避免多次调用函数,详情请参见利用MaxCompute内建函数及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表情字符串。
  • 示例一
    +----+
    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类型。
    • 如果在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类型,空字符串可以被认为属于任何字符集。
    • from_encodingto_encoding:STRING类型,源及目标字符集。
    • 如果任一输入参数为NULL,则返回NULL。
  • 返回值说明

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

    计算输入字符串valuemd5值。

  • 参数说明

    value:STRING类型。如果输入类型是BIGINT、DOUBLE、DECIMAL或者DATETIME,则会隐式转换成STRING类型参与运算,其它类型抛异常。

  • 返回值说明

    返回STRING类型。如果输入参数为NULL,则返回NULL。

REGEXP_EXTRACT

  • 命令格式
    string regexp_extract(string source, string pattern[, bigint occurrence])
  • 命令说明

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

  • 参数说明
    • source:STRING类型,待搜索的字符串。
    • pattern:STRING类型常量,如果pattern为空串或者pattern中没有指定group,则抛异常。
    • occurrence:BIGINT类型常量,必须大于等于0,其它类型或小于0时抛异常,不指定时默认为1,表示返回第一个group。如果occurrence等于0,则返回满足整个pattern的子串。
    说明 数据以UTF-8格式保存。对于中文字符可以用对应的16进制编码表示,中文字符编码的范围是[\x{4e00}-\x{9fa5}]
  • 返回值说明

    返回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("阿里巴巴", "([\\x{4e00}-\\x{9fa5}]+)", 1) = 阿里巴巴
    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]]])
  • 命令说明

    返回字符串sourcestart_position开始,和pattern第n次(nth_occurrence)匹配的子串的起始、结束位置。

  • 参数说明
    • source:STRING类型,待搜索的字符串。
    • pattern:STRING类型常量,pattern为空串时抛异常。
    • start_position:BIGINT类型常量,搜索的开始位置。不指定时默认值为1,其它类型或值小于等于0时抛异常。
    • nth_occurrence:BIGINT类型常量,不指定时默认值为1,表示搜索第一次出现的位置。其它类型或值小于等于0时抛异常。
    • return_option:BIGINT类型常量,值为0或1,其它类型或不允许的值会抛异常。0表示返回匹配的开始位置,1表示返回匹配的结束位置。
  • 返回值说明

    返回BIGINT类型。return_option指定的类型返回匹配的子串在source中的开始或结束位置。如果任一输入参数为NULL,则返回NULL。

  • 示例
    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类型。当引用不存在的组时,不进行替换。
    • 如果任一输入参数为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类型。如果任一输入参数为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类型。如果没有匹配成功,则返回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类型。
    • 如果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])
  • 命令说明

    返回字符串strstart_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"

SUBSTRING

  • 命令格式
    string substring(string|binary str, int start_position[, int length])
  • 命令说明

    返回字符串strstart_position开始往后数,长度为length的子串。

  • 参数说明
    • str:STRING、BINARY类型。如果输入为其它类型,则返回NULL或报错。
    • start_position:INT类型,起始位置为1。当start_position为0时,返回空串。当start_position为负数时,表示开始位置是从字符串的结尾往前倒数,最后一个字符为-1,往前数依次为-2,-3…,其它类型抛异常。
    • length:BIGINT类型,表示子串的长度。值大于0,其它类型或值小于等于0抛异常。
  • 返回值说明

    返回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类型。如果输入参数为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类型输入,其它类型抛异常。对DATETIME类型的格式化输出,请参见另一同名函数TO_CHAR。

  • 返回值说明

    返回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

  • 命令格式
    string ltrim(string str)
  • 命令说明

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

  • 参数说明

    str:STRING类型。如果输入为BIGINT、DECIMAL、DOUBLE或者DATETIME类型,则会隐式转换为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类型。如果输入参数为NULL,则返回NULL。

  • 示例
    select rtrim('a abc ') from dual; 
    --执行结果如下。 
    +-----+
    | _c0 |
    +-----+
    | a abc |
    +-----+

REVERSE

  • 命令格式
    STRING REVERSE(string str)
  • 命令说明

    返回倒序字符串。

  • 参数说明

    str:STRING类型。如果输入为BIGINT、DOUBLE、DECIMAL或DATETIME类型,则会隐式转换为STRING后参与运算,其它类型抛异常。

  • 返回值说明

    返回STRING类型。如果输入参数为NULL,则返回NULL。

  • 示例
    select reverse('abcedfg') from dual;
    --执行结果如下。
    +-----+
    | _c0 |
    +-----+
    | gfdecba |
    +-----+

REPEAT

  • 命令格式
    STRING REPEAT(string str, bigint n)
  • 命令说明

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

  • 参数说明
    • str:STRING类型。如果输入为BIGINT、DOUBLE、DECIMAL或DATETIME类型,则会隐式转换为STRING后参与运算,其它类型抛异常。
    • n:BIGINT类型。长度不超过2M。如果为空,则抛异常。
  • 返回值说明

    返回STRING类型。

  • 示例
    select repeat('abc',5) from lxw_dual; --返回abcabcabcabcabc。

ASCII

  • 命令格式
    Bigint ASCII(string str)
  • 命令说明

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

  • 参数说明

    str:STRING类型。如果输入为BIGINT、DOUBLE、DECIMAL或DATETIME类型,则会隐式转换为STRING后参与运算,其它类型抛异常。

  • 返回值说明

    返回BIGINT类型。

  • 示例
    select ascii('abcde') from dual; --返回97。

MaxCompute 2.0扩展函数

升级到MaxCompute 2.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)
  • 命令说明

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

  • 参数说明
    • SEP: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)
  • 命令说明

    b字符串将a字符串向左补足到len位。

  • 参数说明
    • len:INT整型。
    • ab等:STRING类型。
  • 返回值说明

    返回STRING类型。如果len小于a的位数,则返回a从左开始截取len位字符;如果len为0,则返回空。

  • 示例
    lpad('abcdefgh',10,'12')='12abcdefgh'
    lpad('abcdefgh',5,'12')='abcde'
    lpad('abcdefgh',0,'12') --返回空
说明 目前MaxCompute SQL中使用到新数据类型(TINYINT、SMALLINT、INT、FLOAT、VARCHAR、TIMESTAMP、BINARY)时,需要用set命令开启:
  • Session级别:要使用新数据类型,需在SQL语句前加上set语句set odps.sql.type.system.odps2=true;,并与SQL语句一起提交执行。
  • Project级别:支持对Project级别进行新类型打开。Project Owner可根据需要对Project进行设置,命令为:
    setproject odps.sql.type.system.odps2=true;
    setproject的详细说明请参见其他操作。关于Project级别开启数据类型时的注意事项,请参见数据类型

RPAD

  • 命令格式
    string rpad(string a, int len, string b)
  • 命令说明

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

  • 参数说明
    • len:INT整型。
    • ab等:STRING类型。
  • 返回值说明

    返回STRING类型。如果len小于a的位数,则返回a从左开始截取len位字符;如果len为0,则返回空。

  • 示例
    rpad('abcdefgh',10,'12')='abcdefgh12'
    rpad('abcdefgh',5,'12')='abcde'
    rpad('abcdefgh',0,'12') -- 返回空。
说明 目前MaxCompute SQL中使用到新数据类型(TINYINT、SMALLINT、INT、FLOAT、VARCHAR、TIMESTAMP、BINARY)时,需要用set命令开启:
  • Session级别:要使用新数据类型,需在SQL语句前加上set语句set odps.sql.type.system.odps2=true;,并与SQL语句一起提交执行。
  • Project级别:支持对Project级别进行新类型打开。Project Owner可根据需要对Project进行设置,命令为:
    setproject odps.sql.type.system.odps2=true;
    setproject的详细说明请参见其他操作。关于Project级别开启数据类型时的注意事项,请参见数据类型

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

SOUNDEX

  • 命令格式
    string soundex(string a)
  • 命令说明

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

  • 参数说明

    a为STRING类型。

  • 返回值说明

    返回STRING类型。如果输入参数为NULL,则返回NULL。

  • 示例
    soundex('hello')='H400'

SUBSTRING_INDEX

  • 命令格式
    string substring_index(string a, string SEP, int count))
  • 命令说明

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

  • 参数说明

    asep为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
说明 目前MaxCompute SQL中使用到新数据类型(TINYINT、SMALLINT、INT、FLOAT、VARCHAR、TIMESTAMP、BINARY)时,需要用set命令开启:
  • Session级别:要使用新数据类型,需在SQL语句前加上set语句set odps.sql.type.system.odps2=true;,并与SQL语句一起提交执行。
  • Project级别:支持对Project级别进行新类型打开。Project Owner可根据需要对Project进行设置,命令为:
    setproject odps.sql.type.system.odps2=true;
    setproject的详细说明请参见其他操作。关于Project级别开启数据类型时的注意事项,请参见数据类型

TRANSLATE

  • 命令格式
    string translate(string|varchar str1, string|varchar str2, string|varchar str3)
  • 命令说明

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

  • 返回值说明

    返回STRING类型。如果任一输入参数为NULL,则返回NULL。

  • 示例
    translate('MaxComputer','puter','pute')='MaxCompute'
    translate('aaa','b','c')='aaa'
    translate('MaxComputer','puter',null)=null
说明 目前MaxCompute SQL中使用到新数据类型(TINYINT、SMALLINT、INT、FLOAT、VARCHAR、TIMESTAMP、BINARY)时,需要用set命令开启:
  • Session级别:要使用新数据类型,需在SQL语句前加上set语句set odps.sql.type.system.odps2=true;,并与SQL语句一起提交执行。
  • Project级别:支持对Project级别进行新类型打开。Project Owner可根据需要对Project进行设置,命令为:
    setproject odps.sql.type.system.odps2=true;
    setproject的详细说明请参见其他操作。关于Project级别开启数据类型时的注意事项,请参见数据类型

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:指定的编码格式,只支持GBK格式。
  • 返回值说明

    返回STRING类型。如果输入参数为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_DECODE函数的encoding设置只支持GBK格式。

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格式。
  • 返回值说明

    返回STRING类型。如果输入参数为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"
说明 URL_ENCODE函数的encoding设置只支持GBK格式。

JSON_TUPLE

  • 命令格式
    STRING JSON_TUPLE(STRING json,STRING key1,STRING key2,...)
  • 命令说明

    该函数用于一个标准的JSON字符串中,按照输入的一组键(key1,key2,...)抽取各个键指定的字符串。

  • 参数说明
    • 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使用。
  • 示例
    table 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]]
                    }]}
                   }          |
    +------------+------------+

    提取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]]}]} |
    +-------+-------+
    支持包含中文的Json数据解析。
    SELECT json_tuple(school.json,"校名","地址") AS (item0,item1) FROM school;
    --返回值
    +-------+-------+
    | item0 | item1 |
    +-------+-------+
    | 湖畔大学 | 杭州 |
    +-------+-------+
    支持多层嵌套的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]] |
    +------------+-------+-------+
    支持包含多重嵌套的数组的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     |
    +------------+-------+-------+