您可以在MaxCompute SQL中使用字符串函数对指定字符串进行灵活处理。本文为您提供MaxCompute SQL支持的字符串函数的命令格式、参数说明及示例,指导您使用字符串函数完成开发。

MaxCompute SQL支持的字符串函数如下。

函数 功能
ASCII 返回字符串的第一个字符的ASCII码。
BASE64 将二进制表示值转换为BASE64编码格式字符串。
CHAR_MATCHCOUNT 计算A字符串出现在B字符串中的字符个数。
CHR 将指定ASCII码转换成字符。
CONCAT 将字符串连接在一起。
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类型表示。
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);

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);

CHAR_MATCHCOUNT

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

    计算str1中有多少个字符出现在str2中。

  • 参数说明

    str1str2:必填。STRING类型,必须为有效的UTF-8字符串。如果对比过程中发现有无效字符(非UNICODE编码),则返回负值。

  • 返回值说明

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

  • 示例
    • 示例1:计算字符串aabc出现在abcde中的字符个数。命令示例如下:
      --返回4。
      select char_matchcount('aabc','abcde');
    • 示例2:任一输入为null。命令示例如下:
      --返回NULL。
      select char_matchcount(null,'abcde');

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');

CONCAT

  • 命令格式
    string concat(string <str1>, string <str2>[,...])
  • 命令说明

    将参数中的所有字符串连接在一起。

  • 参数说明

    str1str2:必填。STRING类型。如果输入参数为BIGINT、DOUBLE、DECIMAL或DATETIME类型,则会隐式转换为STRING类型后参与运算,其他类型会返回报错。

  • 返回值说明

    返回STRING类型。如果没有参数或任一参数为NULL,则返回NULL。

  • 示例
    • 示例1:连接字符串aabcabcde。命令示例如下:
      --返回aabcabcde。
      select concat('aabc','abcde');
    • 示例2:输入为空。命令示例如下:
      --返回NULL。
      select concat();
    • 示例3:任一输入为null。命令示例如下:
      --返回NULL。
      select concat('aabc','abcde',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。相关最佳实践案例,请参见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来解析,而不再需要额外使用replaceregexp_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]');

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。表示str2str1中第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);

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类型,源及目标字符集。
  • 返回值说明

    返回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');

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类型。待拆分的字符串。
    • split1split2:可选。STRING类型。用于作为分隔符的字符串,按照指定的两个分隔符拆分源字符串。如果表达式中没有指定这两项,默认split1";"split2":"。当某个被split1拆分后的字符串中有多个split2时,返回结果未定义。
    • key:必填。STRING类型。将字符串按照split1split2拆分后,返回key值对应的Value。
  • 返回值说明
    • 返回STRING类型。
    • split1split2为NULL时,返回NULL。
    • strkey为NULL或没有匹配的key时,返回NULL。
    • 如果有多个Key-Value匹配,返回第一个匹配上的key对应的Value。
  • 示例
    • 示例1:将字符串0:1\;1:2拆分为Key-Value对,返回Key值1对应的Value。命令示例如下:
      --返回2。
      select keyvalue('0:1\;1:2', 1);
      没有指定split1split2,默认split1";"split2":"
      经过split1拆分后,Key-Value对为0:1\,1:2。经过split2拆分后变为如下。
      0 1/  
      1 2
      返回Key为1所对应的Value值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 
      按照":"拆分后,结果如下所示。
      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。

  • 示例
    • 示例1:计算字符串Tech on the net的长度。命令示例如下:
      --返回15。
      select length('Tech on the net');
    • 示例2:输入参数为null。命令示例如下:
      --返回NULL。
      select length(null);

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);

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);

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类型。urlpart为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);

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');

REGEXP_INSTR

  • 命令格式
    bigint regexp_instr(string <source>, string <pattern>[,bigint <start_position>[, bigint <occurrence>[, bigint <return_option>]]])
  • 命令说明

    计算字符串sourcestart_position开始,与patternoccurrence次匹配的子串的起始或结束位置。

  • 参数说明
    • 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.com3开始,与o[[:alpha:]]{1}2次匹配的子串开始位置。命令示例如下:
      --返回14。
      select regexp_instr('i love www.taobao.com', 'o[[:alpha:]]{1}', 3, 2);
    • 示例2:计算字符串i love www.taobao.com3开始,与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);

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引用了不存在的组,
      -- 请避免这样使用,引用不存在的组的结果未定义。

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);

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);

SUBSTR

  • 命令格式
    string substr(string <str>, bigint <start_position>[, bigint <length>])
  • 命令说明

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

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,依次往前倒数,其他类型会返回报错。
    • 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);

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);

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);

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);

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);

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);

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);

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);

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);

UNBASE64

  • 命令格式
    binary unbase64(string <str>)
  • 命令说明

    将BASE64编码格式字符串str转换为二进制表示格式。

  • 参数说明

    str:必填。STRING类型。待转换BASE64编码格式字符串。

  • 返回值说明

    返回BINARY类型。

  • 示例
    • 示例1:将字符串YWxpYmFiYQ==转换为二进制表示值。命令示例如下:
      --返回alibaba。
      select unbase64('YWxpYmFiYQ==');
    • 示例2:输入参数为null。命令示例如下:
      --返回NULL。
      select ascii(null);

MaxCompute 2.0扩展函数

升级到MaxCompute 2.0后,产品扩展了部分函数。如果您用到的函数涉及新数据类型(TINYINT、SMALLINT、INT、FLOAT、VARCHAR、TIMESTAMP或BINARY),在使用扩展函数时,需要执行如下语句开启新数据类型开关:
  • Session级别:如果使用新数据类型,您需要在SQL语句前加上语句set odps.sql.type.system.odps2=true;,并与SQL语句一起提交执行。
  • Project级别:Project Owner可根据需要对Project进行设置,等待10~15分钟后才会生效。命令如下。
    setproject odps.sql.type.system.odps2=true;
    setproject的详细说明请参见项目空间操作。关于开启Project级别数据类型的注意事项,请参见数据类型版本说明

CONCAT_WS

  • 命令格式
    string concat_ws(string <separator>, string <str1>, string <str2>[,...])
    string concat_ws(string <separator>, array)
  • 命令说明

    返回将参数中的所有字符串按照指定的分隔符连接在一起的结果。此函数为MaxCompute 2.0扩展函数。

  • 参数说明
    • separator:必填。STRING类型的分隔符。如果不指定,则返回报错。
    • str1str2:至少要指定2个字符串。STRING类型。如果输入为BIGINT、DECIMAL、DOUBLE或DATETIME类型,则会隐式转换为STRING类型后参与运算,其他类型会返回报错。
  • 返回值说明

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

  • 示例
    • 示例1:将字符串I loveyou very much通过:连接。命令示例如下:
      --返回name:hanmeimei。
      select concat_ws(':','name','hanmeimei');
      -
    • 示例2:任一输入为null。命令示例如下:
      --返回NULL。
      select concat_ws(':','avg',null,'34');

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     |
      +------------+-------+-------+

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');

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');

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');

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);

SUBSTRING_INDEX

  • 命令格式
    string substring_index(string <str>, string <separator>, int <count>)
  • 命令说明

    截取字符串strcount个分隔符之前的字符串。如果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);

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);

URL_ENCODE

  • 命令格式
    string url_encode(string <input>[, string <encoding>])
  • 命令说明
    将输入字符串编码为application/x-www-form-urlencoded MIME格式。编码格式如下:
    • a~z、A~Z保持不变。
    • 英文句点(.)、短划线(-)、星号(*)和下划线(_)保持不变。
    • 空格转为加号(+)。
    • 其余字符根据指定的encoding转为字节值,然后将每个字节值表示为%xy的格式,xy是该字符的十六进制表示方式。
    此函数为MaxCompute 2.0扩展函数。
  • 参数说明
    • 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名称解码为对应的字符串。
    • 其余的字符保持不变。
    此函数为MaxCompute 2.0扩展函数。
  • 参数说明
    • 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');