全部產品
Search
文件中心

MaxCompute:字串函數

更新時間:Sep 27, 2024

當您需要對儲存在表中的字串資料進行截取、拼接、轉化、比較、搜尋等操作,您可以使用MaxCompute支援的字串函數對指定字串進行靈活處理。本文為您介紹MaxCompute支援的字串函數的命令格式、參數說明及樣本。

MaxCompute SQL支援的字串函數如下。

函數

功能

ASCII

返回字串的第一個字元的ASCII碼。

CHAR_MATCHCOUNT

計算A字串出現在B字串中的字元個數。

CHR

將指定ASCII碼轉換成字元。

CONCAT

將字串串連在一起。

CONCAT_WS

將參數中的所有字串按照指定的分隔字元串連在一起。

DECODE

將字串按照指定編碼格式解碼。

ENCODE

將字串按照指定編碼格式編碼。

FIND_IN_SET

在以逗號分隔的字串中尋找指定字串的位置。

FORMAT_NUMBER

將數字轉化為指定格式的字串。

FROM_CHARSET

將指定編碼格式的位元據轉換為UTF-8格式的字串。

FROM_JSON

根據給定的JSON字串和輸出格式資訊,返回ARRAY、MAP或STRUCT類型。

GET_JSON_OBJECT

在一個標準JSON字串中,按照指定方式抽取指定的字串。

INITCAP

將字串轉換為固定格式的字串,單詞之間以空格分隔。轉換後的格式為:字串中每個單字首大寫,其餘小寫。

INSTR

計算A字串在B字串中的位置。

IS_ENCODING

判斷字串是否可以從指定的A字元集轉換為B字元集。

JSON_TUPLE

在一個標準的JSON字串中,按照輸入的一組鍵抽取各個鍵指定的字串。

KEYVALUE

將字串拆分為Key-Value對,並將Key-Value對分開,返回Key對應的Value。

KEYVALUE_TUPLE

將字串拆分為多個Key-Value對,並將Key-Value對分開,返回多個Key對應的Value。

LENGTH

計算字串的長度。

LENGTHB

計算字串以位元組為單位的長度。

LOCATE

在字串中尋找另一指定字串的位置。

LPAD

將字串向左補足到指定位元。

LTRIM

去除字串的左端字元。

MASK_HASH

返回基於字串運算式計算的Hash值。

MD5

計算字串的MD5值。

PARSE_URL

對URL進行解析返回指定部分的資訊。

PARSE_URL_TUPLE

對URL進行解析返回多個部分的資訊。

REGEXP_COUNT

計算字串從指定位置開始,匹配指定規則的子串數。

REGEXP_EXTRACT

將字串按照指定規則拆分為組後,返回指定組的字串。

REGEXP_EXTRACT_ALL

在字串中尋找所有出現的Regex匹配的子字串,並把找到的字串以數組形式返回。

REGEXP_INSTR

返回字串從指定位置開始,與指定規則匹配指定次數的子串的起始或結束位置。

REGEXP_REPLACE

將字串中,與指定規則在指定次數匹配的子串替換為另一字串。

REGEXP_SUBSTR

返回字串中,從指定位置開始,與指定規則匹配指定次數的子串。

REPEAT

返回將字串重複指定次數後的結果。

REPLACE

將字串中與指定字串匹配的子串替換為另一字串。

REVERSE

返回倒序字串。

RPAD

將字串向右補足到指定位元。

RTRIM

去除字串的右端字元。

SOUNDEX

將一般字元串替換為SOUNDEX字串。

SPACE

產生空白字元串。

SPLIT

按照分隔字元分割字串後返回數組。

SPLIT_PART

按照分隔字元拆分字串,返回指定部分的子串。

SUBSTR

返回STRING類型字串從指定位置開始,指定長度的子串。

SUBSTRING

返回STRING或BINARY類型字串從指定位置開始,指定長度的子串。

SUBSTRING_INDEX

截取字串指定分隔字元前的字串。

TO_CHAR

將BOOLEAN、BIGINT、DECIMAL或DOUBLE類型值轉為對應的STRING類型表示。

TO_JSON

將指定的複雜類型輸出為JSON字串。

TOLOWER

將字串中的英文字元轉換為小寫形式。

TOUPPER

將字串中的英文字元轉換為大寫形式。

TRANSLATE

將A出現在B中的字串替換為C字串。

TRIM

去除字串的左右兩端字元。

URL_DECODE

將字串從application/x-www-form-urlencoded MIME格式轉換為常規字元。

URL_ENCODE

將字串編碼為application/x-www-form-urlencoded MIME格式。

注意事項

升級到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層級資料類型的注意事項,請參見資料類型版本說明

使用限制

以下函數只支援英文字元的轉換:

  • TRIM/RTRIM/LTRIM:trimChars只支援英文字元。

  • REVERSE:在Hive模式下只支援英文字元。

  • SOUNDEX:僅轉換英文字元。

  • TOLOWER:將字串中的英文字元轉換為小寫形式。

  • TOUPPER:將字串中的英文字元轉換為大寫形式。

  • INITCAP:將字串中每個單詞首字母(英文字元)轉化為大寫形式,其餘為小寫。

ASCII

  • 命令格式

    bigint ascii(string <str>)
  • 命令說明

    返回字串str第一個字元的ASCII碼。

  • 參數說明

    str:必填。STRING類型。如果輸入為BIGINT、DOUBLE、DECIMAL或DATETIME類型,則會隱式轉換為STRING類型後參與運算。

  • 傳回值說明

    返回BIGINT類型。返回規則如下:

    • str非STRING、BIGINT、DOUBLE、DECIMAL或DATETIME類型時,返回報錯。

    • str值為NULL時,返回NULL。

  • 樣本

    • 樣本1:返回字串abcde第一個字元的ASCII碼。命令樣本如下。

      --返回97。
      select ascii('abcde'); 
    • 樣本2:輸入參數為NULL。命令樣本如下。

      --返回NULL。
      select ascii(null);

CHAR_MATCHCOUNT

  • 命令格式

    bigint char_matchcount(string <str1>, string <str2>)
  • 命令說明

    計算str1中有多少個字元出現在str2中。

  • 參數說明

    str1str2:必填。STRING類型,必須為有效UTF-8字串。如果對比過程中發現有無效字元(非UNICODE編碼),則返回負值。

  • 傳回值說明

    返回BIGINT類型。str1str2值為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類型。返回規則如下:

    • ascii值不在取值範圍內時,返回報錯。

    • ascii非BIGINT、STRING、DOUBLE或DECIMAL類型時,返回報錯。

    • ascii值為NULL時,返回NULL。

  • 樣本

    • 樣本1:將ASCII碼100轉換為字元。命令樣本如下。

      --返回d。
      select chr(100);
    • 樣本2:輸入參數為NULL。命令樣本如下。

      --返回NULL。
      select chr(null);
    • 樣本3:輸入為STRING類型字元。命令樣本如下。

      --隱式轉換為BIGINT類型後參與運算,返回d。
      select chr('100');

CONCAT

  • 命令格式

    array<T> concat(array<T> <a>, array<T> <b>[,...])
    string concat(string <str1>, string <str2>[,...])
  • 命令說明

    • 輸入為ARRAY數組:將多個ARRAY數組中的所有元素串連在一起,產生一個新的ARRAY數組。

    • 輸入為字串:將多個字串串連在一起,產生一個新的字串。

  • 參數說明

    • ab:必填。ARRAY數組。array<T>中的T指代ARRAY數組元素的資料類型,數組中的元素可以為任意類型。ab中元素的資料類型必須一致。數組中的元素為NULL值時會參與運算。

    • str1str2:必填。STRING類型。如果輸入參數為BIGINT、DOUBLE、DECIMAL或DATETIME類型,則會隱式轉換為STRING類型後參與運算,其他類型會返回報錯。

  • 傳回值說明

    • 返回ARRAY類型。如果任一輸入ARRAY數組為NULL,返回結果為NULL。

    • 返回STRING類型。如果沒有參數或任一參數為NULL,返回結果為NULL。

  • 樣本

    • 樣本1:串連ARRAY數組array(10, 20)array(20, -20)。命令樣本如下。

      --返回[10, 20, 20, -20]。
      select concat(array(10, 20), array(20, -20));
    • 樣本2:ARRAY數組元素包含NULL。命令樣本如下。

      --返回[10, NULL, 20, -20]。
      select concat(array(10, null), array(20, -20));
    • 樣本3:任一ARRAY數組為NULL。命令樣本如下。

      --返回NULL。
      select concat(array(10, 20), null);
    • 樣本4:連接字串aabcabcde。命令樣本如下。

      --返回aabcabcde。
      select concat('aabc','abcde');
    • 樣本5:輸入為空白。命令樣本如下。

      --返回NULL。
      select concat();
    • 樣本6:任一字串輸入為NULL。命令樣本如下。

      --返回NULL。
      select concat('aabc', 'abcde', null);

CONCAT_WS

  • 命令格式

    string concat_ws(string <separator>, string <str1>, string <str2>[,...])
    string concat_ws(string <separator>, array<string> <a>)
  • 命令說明

    返回將參數中的所有字串或ARRAY數組中的元素按照指定的分隔字元串連在一起的結果。此函數為MaxCompute 2.0擴充函數。

  • 參數說明

    • separator:必填。STRING類型的分隔字元。

    • str1str2:至少要指定2個字串。STRING類型。如果輸入為BIGINT、DECIMAL、DOUBLE或DATETIME類型,則會隱式轉換為STRING類型後參與運算。

    • a:必填。ARRAY數組。數組中的元素為STRING類型。

  • 傳回值說明

    返回STRING類型或STRUCT類型。返回規則如下:

    • str1str2非STRING、BIGINT、DECIMAL、DOUBLE或DATETIME類型時,返回報錯。

    • 如果沒有輸入參數或任一輸入參數值為NULL,返回NULL。

  • 樣本

    • 樣本1:將字串namehanmeimei通過:串連。命令樣本如下。

      --返回name:hanmeimei。
      select concat_ws(':','name','hanmeimei');

      -

    • 樣本2:任一輸入參數為NULL。命令樣本如下。

      --返回NULL。
      select concat_ws(':','avg',null,'34');
    • 樣本3:將ARRAY數組array('name', 'hanmeimei')中的元素通過:串連。命令樣本如下。

      --返回name:hanmeimei。
      select concat_ws(':',array('name', 'hanmeimei'));

DECODE

  • 命令格式

    string decode(binary <str>, string <charset>)
  • 命令說明

    str按照charset格式進行解碼。

  • 參數說明

    • str:必填。BINARY類型,待解碼的字串。

    • charset:必填。STRING類型,編碼格式。取值範圍為:UTF-8、UTF-16、UTF-16LE、UTF-16BE、ISO-8859-1、US-ASCII。

      說明

      目前ISO-8859-1和US-ASCII編碼格式只支援對英文進行編碼或解碼,暫不支援中文。

  • 傳回值說明

    返回STRING類型。strcharset值為NULL時,返回NULL。

  • 樣本

    • 樣本1:將字串“中文範例”按照UTF-8格式編碼。命令樣本如下。

      --編解碼
      select decode(encode("中文範例","UTF-8"), "UTF-8");
      --返回
      +-----+
      | _c0 |
      +-----+
      | 中文範例 |
      +-----+
    • 樣本2:任一輸入參數為NULL。命令樣本如下。

      --返回結果為NULL。
      select decode(encode("中文範例","UTF-8"), null);
      | _c0 |
      +-----+
      | NULL |
      +-----+

ENCODE

  • 命令格式

    binary encode(string <str>, string <charset>)
  • 命令說明

    str按照charset格式進行編碼。

  • 參數說明

    • str:必填。STRING類型。待重新編碼的字串。

    • charset:必填。STRING類型。編碼格式。取值範圍為:UTF-8、UTF-16、UTF-16LE、UTF-16BE、ISO-8859-1、US-ASCII。

  • 傳回值說明

    返回BINARY類型。strcharset值為NULL時,返回NULL。

  • 樣本

    • 樣本1:將字串abc按照UTF-8格式編碼。命令樣本如下。

      --返回abc。
      select encode("abc", "UTF-8");
    • 樣本2:將字串abc按照UTF-16BE格式編碼。命令樣本如下。

      --返回=00a=00b=00c。
      select encode("abc", "UTF-16BE");
    • 樣本3:任一輸入參數為NULL。命令樣本如下。

      --返回結果為NULL。
      select encode("abc", null);

FIND_IN_SET

  • 命令格式

    bigint find_in_set(string <str1>, string <str2>)
  • 命令說明

    尋找字串str1在以逗號(,)分隔的字串str2中的位置,從1開始計數。

  • 參數說明

    • str1:必填。STRING類型。待尋找的字串。

    • str2:必填。STRING類型。以逗號(,)分隔的字串。

  • 傳回值說明

    返回BIGINT類型。返回規則如下:

    • str2中無法匹配到str1str1中包含逗號(,)時,返回0。

    • str1str2值為NULL時,返回NULL。

  • 樣本

    • 樣本1:尋找字串ab在字串abc,hello,ab,c中的位置。命令樣本如下。

      --返回3。
      select find_in_set('ab', 'abc,hello,ab,c');
    • 樣本2:尋找字串hi在字串abc,hello,ab,c中的位置。命令樣本如下。

      --返回0。
      select find_in_set('hi', 'abc,hello,ab,c');
    • 樣本3:任一輸入參數為NULL。命令樣本如下。

      --返回NULL。
      select find_in_set(null, 'abc,hello,ab,c');

FORMAT_NUMBER

  • 命令格式

    string format_number(float|double|decimal <expr1>, int <expr2>)
  • 命令說明

    expr1轉化為滿足expr2格式的字串。

  • 參數說明

    • expr1:必填。FLOAT、DOUBLE、DECIMAL類型。需要格式化的資料。

    • expr2:必填。INT類型,取值範圍為0~340。指代需要保留的小數位元。也可以為類似#,###,###.##格式的描述。不同取值返回的小數位元不同。

  • 傳回值說明

    返回STRING類型。返回規則如下:

    • 0<expr2≤340時,四捨五入到小數點後指定位元。

    • expr2=0時,只保留整數,無小數點或小數部分。

    • expr2<0expr2>340時,會返回報錯。

    • expr1expr2值為空白或NULL時,返回NULL。

  • 樣本

    • 樣本1:對給定數字按照指定格式輸出。命令樣本如下。

      --返回5.230。
      select format_number(5.230134523424545456,3);
      --返回12,332.123。
      select format_number(12332.123456, '#,###,###,###.###');
    • 樣本2:任一輸入參數為空白或NULL。命令樣本如下。

      --返回NULL。
      select format_number('',3);
      --返回NULL。
      select format_number(null,3);

FROM_CHARSET

  • 命令格式

    STRING FROM_CHARSET(binary <source>, string <source_charset>, [string <mode>])
  • 命令說明

    FROM_CHARSET支援將某些非UTF-8編碼的位元據轉化為UTF-8字串,方便後續計算的使用。

  • 參數說明

    • source:必填,BINARY類型,待轉換的二進位(Bytes)資料。

    • source_charset:必填,STRING類型,source參數原本的位元據編碼格式。取值範圍為:UTF-8UTF-16UTF-16LEUTF-16BEISO-8859-1US-ASCIIGB2312GBKGB18030

    • mode:可選,STRING類型,將source的二進位(Bytes)資料轉換成指定編碼格式字串時,若遇到無法對應的字元時,採取的處理模式。取值說明如下:

      • NONE(預設值):不做任何處理,提示報錯。

      • TRANSLIT:使用指定編碼格式中類似的字元替換。

      • IGNORE:忽略報錯的內容,然後繼續完成命令。

  • 傳回值說明

    返回UTF-8編碼格式的STRING類型資料。當參數為NULL或Null 字元串時,返回規則如下:

    • 任意一個輸入參數為NULL時,返回結果為NULL。

    • 任意一個輸入參數為空白字串時,返回報錯。

  • 樣本

    • 樣本1:將UTF-8編碼的位元據轉換為UTF-8字串。

      SELECT FROM_CHARSET(unhex('e58aa0e6b2b9e9949fe696a4e68bb70a'),'UTF-8', 'TRANSLIT');

      返回結果如下

      +------------+
      | _c0        |
      +------------+
      | 加油錕斤拷
           |
      +------------+
    • 樣本2:將GBK編碼的位元據轉換為UTF-8字串。

      SELECT FROM_CHARSET(unhex('b9feb9febac3a4ce'), 'GBK');

      返回結果如下。

      +------------+
      | _c0        |
      +------------+
      | 哈哈好の       |
      +------------+
    • 樣本3:當輸入參數為NULL時,返回結果為NULL。

      SELECT FROM_CHARSET(unhex('b9feb9febac3a4ce'), null);

      返回結果如下。

      +------------+
      | _c0        |
      +------------+
      | NULL       |
      +------------+

FROM_JSON

  • 命令格式

    from_json(<jsonStr>, <schema>)
  • 命令說明

    根據JSON字串jsonStrschema資訊,返回ARRAY、MAP或STRUCT類型。

  • 參數說明

    • 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類型。同時您需要注意,對應FLOAT、DOUBLE、DECIMAL三種資料類型無法保證小數的精度,如果需要確保精度可以先用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>'));

GET_JSON_OBJECT

使用說明

GET_JSON_OBJECT函數的作用是在一個標準JSON字串中,按照JSON PATH抽取指定的字串。當前函數的入參支援兩種類型:

  • 入參為JSON類型:基於最新支援的JSON資料類型,採用更為規範的JSON PATH。

  • 入參為STRING類型:原有的JSON PATH解析方式。

入參類型不同時函數的使用方式和注意事項不同,本文為您展示入參分別為JSON和STRING類型時,GET_JSON_OBJECT函數的使用方法。

說明
  • 新JSON類型所使用的JSON PATH與原有的JSON PATH規範不同,可能存在相容性問題。

  • GET_JSON_OBJECT不支援JSON PATH的正則文法。

入參為JSON類型

  • 命令格式

    string get_json_object(json <json>, string <json_path>)
  • 命令說明

    在一個標準JSON字串中,按照JSON PATH抽取指定的字串。

  • 參數說明

    • json:必填,待處理的JSON資料。

    • json_path:必填,需要返回的值的JSON路徑。

  • 傳回值說明

    返回STRING類型。

  • 樣本

    • 樣本1:從JSON中擷取key為a的value值。

      select get_json_object(json '{"a":1, "b":2}', '$.a');

      返回結果:

      +-----+
      | _c0 |
      +-----+
      | 1   |
      +-----+
    • 樣本2:從JSON中擷取key為c的value值。

      select get_json_object(json '{"a":1, "b":2}', '$.c');

      返回結果:

      +-----+
      | _c0 |
      +-----+
      | NULL |
      +-----+
    • 樣本3:JSON Path非法時,返回NULL。

      select get_json_object(json '{"a":1, "b":2}', '$invalid_json_path');

      返回結果:

      +-----+
      | _c0 |
      +-----+
      | NULL |
      +-----+

入參為STRING類型

  • 命令格式

    string get_json_object(string <json>, string <path>)
  • 命令說明

    在一個標準JSON字串中,按照path抽取指定的字串。每次調用該函數時,都會讀一次未經處理資料,因此反覆調用可能影響效能和產生費用。您可以通過get_json_object,結合UDTF,輕鬆轉換JSON格式日誌資料,避免多次調用函數,詳情請參見利用MaxCompute內建函數及UDTF轉換JSON格式日誌資料

  • 參數說明

    • json:必填。STRING類型。標準的JSON格式對象,格式為{Key:Value, Key:Value,...}。如果遇到英文雙引號("),需要用兩個反斜線(\\)進行轉義。如果遇到英文單引號('),需要用一個反斜線(\)進行轉義。

    • path:必填。STRING類型。表示在json中的path,以$開頭。更多path資訊,請參見LanguageManual UDF。相關最佳實務案例,請參見JSON資料從OSS遷移至MaxCompute。不同字元的含義如下:

      • $:表示根節點。

      • .['']:表示子節點。MaxCompute支援用這兩種字元解析JSON對象,當JSON的Key本身包含.時,可以用['']來替代。

      • [][number]表示數組下標,從0開始。

      • *Wildcard for [],返回整個數組。*不支援轉義。

  • 限制條件

    ['']取數只在新版本支援,您需要添加設定Flag的語句set odps.sql.udf.getjsonobj.new=true;

  • 傳回值說明

    • 如果json為空白或非法的json格式,返回NULL。

    • 如果json合法,path也存在,則返回對應字串。

    • 您可以通過在Session層級設定odps.sql.udf.getjsonobj.new屬性來控制函數的返回方式:

      • 當設定set odps.sql.udf.getjsonobj.new=true;時,函數返回行為採用了保留原始字串的方式進行輸出。

        推薦您使用此配置,函數返回行為更標準,處理資料更方便,效能更好。如果MaxCompute專案有使用JSON保留字元轉義行為的存量作業,建議保留原有行為方式,避免因未驗證而直接使用該行為產生錯誤或正確性問題。函數返回行為規則如下:

        • 傳回值仍是一個JSON字串,可以繼續當做JSON來解析,而不再需要額外使用replaceregexp_replace等函數替換反斜線。

        • 一個JSON對象中可以出現相同的Key,可以成功解析。

          --返回1。
          select get_json_object('{"a":"1","a":"2"}', '$.a');
        • 支援EmojiEmoji對應的編碼字串。但DataWorks暫不支援輸入EmojiEmoji,僅支援通過Data Integration等工具直接將EmojiEmoji對應的編碼字串寫入MaxCompute,再用get_json_object函數處理。

          --返回Emoji符號。
          select get_json_object('{"a":"<Emoji符號>"}', '$.a');
        • 輸出結果按照JSON字串的原始排序方式輸出。

          --返回{"b":"1","a":"2"}。
          select get_json_object('{"b":"1","a":"2"}', '$');
      • 當設定set odps.sql.udf.getjsonobj.new=false;時,函數返回行為採用了JSON保留字元轉義的方式進行輸出。函數返回行為規則如下:

        • 分行符號(\n)、引號(")等JSON保留字元使用字串'\n''\"'顯示。

        • 一個JSON對象中不可以出現相同的Key,可能導致無法解析。

          --返回NULL。
          select get_json_object('{"a":"1","a":"2"}', '$.a');
        • 不支援解析EmojiEmoji編碼的字串。

          --返回NULL。
          select get_json_object('{"a":"<Emoji符號>"}', '$.a');
        • 輸出結果按照字典排序方式輸出。

          --返回{"a":"2","b":"1"}。
          select get_json_object('{"b":"1","a":"2"}', '$');
      說明

      自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"]

      您可以通過申請連結或搜尋(DingTalk群號:11782920)加入MaxCompute開發人員社區釘群聯絡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"]。
      set odps.sql.udf.getjsonobj.new=true;
      select get_json_object('{"aaa":"bbb","ccc":{"ddd":"eee","fff":"ggg","hhh":["h0","h1","h2"]},"iii":"jjj"}','$.ccc.hhh[*]');
      --返回["h0","h1","h2"]。
      set odps.sql.udf.getjsonobj.new=false;
      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對象中的資訊。命令樣本如下。

      --建立一張表。
      create table mf_json (id string, json string);
      --向表中插入資料,Key帶.。
      insert into table mf_json (id, json) values ("1", "{
      \"China.beijing\":{\"school\":{\"id\":0,\"book\":[{\"title\": \"A\",
      \"price\": 8.95},{\"title\": \"B\",\"price\": 10.2}]}}}");
      --向表中插入資料,Key不帶.。
      insert into table mf_json (id, json) values ("2", "{
      \"China_beijing\":{\"school\":{\"id\":0,\"book\":[{\"title\": \"A\",
      \"price\": 8.95},{\"title\": \"B\",\"price\": 10.2}]}}}");
      --取id的值,查詢key為China.beijing,返回0。由於包含.,只能用['']來解析。
      select get_json_object(json, "$['China.beijing'].school['id']") from mf_json where id =1;
      --取id的值,查詢key為China_beijing,返回0。查詢方法有如下兩種。
      select get_json_object(json, "$['China_beijing'].school['id']") from mf_json where id =2;
      select get_json_object(json, "$.China_beijing.school['id']") from mf_json where id =2;
    • 樣本4:JSON輸入為空白或非法格式。命令樣本如下。

      --返回NULL。
      select get_json_object('','$.array[1][1]');
      --返回NULL。
      select get_json_object('"array":["aaaa",1111],"bbbb":["cccc",3333]','$.array[1][1]');
    • 樣本5:JSON字串涉及轉義。命令樣本如下。

      set odps.sql.udf.getjsonobj.new=true;
      --返回"1"。
      select get_json_object('{"a":"\\"1\\"","b":"2"}', '$.a'); 
      --返回'1'。
      select get_json_object('{"a":"\'1\'","b":"2"}', '$.a'); 

INITCAP

  • 命令格式

    string initcap(<str>)
  • 命令說明

    str轉換為固定格式的字串,單詞之間以空格分隔,轉換後的格式為:字串中每個單字首大寫,其餘小寫。

  • 參數說明

    str:必填。STRING類型。輸入的字串。

  • 傳回值說明

    返回一個字串,字串中每個單字首大寫,其餘變為小寫。

  • 樣本

    --返回Odps Sql。
    SELECT initcap("oDps sql");

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。

    • 如果str2為空白串,則總能匹配成功,例如select instr('abc','');會返回1。

    • str1str2start_positionnth_appearance值為NULL時,返回NULL。

  • 樣本

    • 樣本1:計算字元e在字串Tech on the net中的位置。命令樣本如下。

      --返回2。
      select instr('Tech on the net', 'e');
    • 樣本2:計運算元串on在字串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類型。Null 字元串可以被認為屬於任何字元集。

    • from_encodingto_encoding:必填。STRING類型,源及目標字元集。

  • 傳回值說明

    返回BOOLEAN類型。返回規則如下:

    • 如果str能夠成功轉換,則返回True,否則返回False。

    • strfrom_encodingto_encoding值為NULL時,返回NULL。

JSON_TUPLE

  • 命令格式

    string json_tuple(string <json>, string <key1>, string <key2>,...)
  • 命令說明

    用於一個標準的JSON字串中,按照輸入的一組鍵(key1,key2,...)抽取各個鍵指定的字串。

  • 參數說明

    • json:必填。STRING類型,標準的JSON格式字串。

    • key:必填。STRING類型,用於描述在JSON中的path,一次可輸入多個,不能以貨幣符號($)開頭。MaxCompute支援用.['']這兩種字元解析JSON,當JSON的Key本身包含.時,可以用['']來替代。

  • 傳回值

    返回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使用。

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。

KEYVALUE_TUPLE

  • 命令格式

    KEYVALUE_TUPLE(str, split1, split2, key1, key2, ..., keyN)
  • 命令說明

    將字串str按照split1分成Key-Value對,並按split2將Key-Value對分開,返回多個key所對應的Value。

  • 參數說明

    • str:必填。STRING類型。待拆分的字串。

    • split1split2:必填。STRING類型。用於作為分隔字元的字串,按照指定的兩個分隔字元拆分源字串。當某個被split1拆分後的字串中有多個split2時,返回結果未定義。

    • key:必填。STRING類型。將字串按照split1split2拆分後,返回key值對應的Value。

  • 傳回值說明

    返回STRING類型。返回規則如下:

    • split1split2值為NULL時,返回NULL。

    • strkey值為NULL或沒有匹配的key時,返回NULL。

  • 樣本

    --建立表
    create table mf_user (
    user_id string,
    user_info string
    );
    --插入資料
    insert into mf_user values('1','age:18;genda:f;address:abc'),('2','age:20;genda:m;address:bcd');
    --查詢
    SELECT user_id,
    KEYVALUE(user_info,';',':','age') as age,
    KEYVALUE(user_info,';',':','genda') as genda,
    KEYVALUE(user_info,';',':','address') as address
    FROM mf_user;
    --等同於使用KEYVALUE查詢
    SELECT user_id,
    age,
    genda,
    address
    FROM mf_user LATERAL VIEW KEYVALUE_TUPLE(user_info,';', ':','age','genda','address') ui AS age,genda,address;

    結果如下所示。

    +------------+------------+------------+------------+
    | user_id    | age        | genda      | address    |
    +------------+------------+------------+------------+
    | 1          | 18         | f          | abc        |
    | 2          | 20         | m          | bcd        |
    +------------+------------+------------+------------+

LENGTH

  • 命令格式

    bigint length(string <str>)
  • 命令說明

    計算字串str的長度。

  • 參數說明

    str:必填。STRING類型。如果輸入為BIGINT、DOUBLE、DECIMAL或DATETIME類型,則會隱式轉換為STRING類型後參與運算。

  • 傳回值說明

    返回BIGINT類型。返回規則如下:

    • str非STRING、BIGINT、DOUBLE、DECIMAL或DATETIME類型時,返回報錯。

    • str值為NULL時,返回NULL。

    • str為非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類型。返回規則如下:

    • str非STRING、BIGINT、DOUBLE、DECIMAL或DATETIME類型時,返回報錯。

    • str值為NULL時,返回NULL。

  • 樣本

    • 樣本1:計算字串Tech on the net以位元組為單位的長度。命令樣本如下。

      --返回15。
      select lengthb('Tech on the net');
    • 樣本2:輸入參數為NULL。命令樣本如下。

      --返回NULL。
      select lengthb(null);

LOCATE

  • 命令格式

    bigint locate(string <substr>, string <str>[, bigint <start_pos>]) 
  • 命令說明

    str中尋找substr的位置。您可以通過start_pos指定開始尋找的位置,從1開始計數。

  • 參數說明

    • substr:必填。STRING類型。待尋找的字串。

    • str:必填。STRING類型。待匹配的字串。

    • start_pos:可選。BIGINT類型。指定尋找的起始位置。

  • 傳回值說明

    返回為BIGINT類型。返回規則如下:

    • str中無法匹配到substr時,返回0。

    • strsubstr值為NULL時,返回NULL。

    • start_pos值為NULL時,返回0。

  • 樣本

    • 樣本1:尋找字串ab在字串abchelloabc中的位置。命令樣本如下。

      --返回1。
      select locate('ab', 'abchelloabc');
    • 樣本2:尋找字串hi在字串abchelloabc中的位置。命令樣本如下。

      --返回0。
      select locate('hi', 'abc,hello,ab,c');
    • 樣本3:start_pos為NULL。命令樣本如下。

      --返回0。
      select locate('ab', 'abhelloabc', null);

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

LTRIM

  • 命令格式

    string ltrim(string <str>[, <trimChars>])
    string trim(leading [<trimChars>] from <str>)
  • 命令說明

    str的左端去除字元:

    • 如果未指定trimChars,則預設去除空白字元。

    • 如果指定了trimChars,則以trimChars中包含的字元作為一個集合,從str的左端去除儘可能長的所有字元都在集合trimChars中的子串。

  • 參數說明

    • str:必填。STRING類型。待去除左端字元的字串。如果輸入為BIGINT、DECIMAL、DOUBLE或DATETIME類型,則會隱式轉換為STRING類型後參與運算。

    • trimChars:可選。String類型。待去除的字元。

  • 傳回值說明

    返回為STRING類型。返回規則如下:

    • str非STRING、BIGINT、DOUBLE、DECIMAL或DATETIME類型時,返回報錯。

    • strtrimChars值為NULL時,返回NULL。

  • 樣本

    • 樣本1:去除字串 yxTxyomxx 的左邊空格。命令樣本如下。

      --返回字串yxTxyomxx 。
      select ltrim(' yxTxyomxx ');
      --等效於如下語句。
      select trim(leading from ' yxTxyomxx ');
    • 樣本2:去除字串yxTxyomxx左端所有字元都在集合xy中的子串。

      --返回Txyomxx,只要左端遇到x或者y就會被去掉。
      select ltrim('yxTxyomxx', 'xy');
      --等效於如下語句。
      select trim(leading 'xy' from 'yxTxyomxx');
    • 樣本3:輸入參數為NULL。命令樣本如下。

      --返回NULL。
      select ltrim(null);
      select ltrim('yxTxyomxx', null);

MASK_HASH

  • 命令格式

    mask_hash(<expr>)
  • 命令說明

    返回基於字串運算式(expr)計算的Hash值。Hash值相同證明運算式的值相同。

  • 參數說明

    expr:必填。需要計算Hash值的字串運算式。支援STRING、CHAR、VARCHAR、BINARY類型。

  • 傳回值說明

    返回字串運算式計算出的Hash值, 固定長度64位元組; 對所有非字串類型的運算式返回null, 與Hive相容。

  • 樣本

    --對abc返回hash值
    select mask_hash("abc");
    --返回
    +------------+
    | _c0        |
    +------------+
    | ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad |
    +------------+
    
    --對其他類型輸入值,返回NULL
    select mask_hash(100);
    --返回
    +------------+
    | _c0        |
    +------------+
    | NULL       |
    +------------+

MD5

  • 命令格式

    string md5(string <str>)
  • 命令說明

    計算字串str的MD5值。

  • 參數說明

    str:必填。STRING類型。如果輸入為BIGINT、DOUBLE、DECIMAL或DATETIME類型,則會隱式轉換為STRING類型參與運算。

  • 傳回值說明

    返回STRING類型。返回規則如下:

    • str非STRING、BIGINT、DOUBLE、DECIMAL或DATETIME類型時,返回報錯。

    • str值為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:必填。STRING類型。URL連結。無效URL連結會返回報錯。

    • part:必填。STRING類型。取值包含:HOST、PATH、QUERY、REF、PROTOCOL、AUTHORITY、FILE和USERINFO,不區分大小寫。

    • key:可選。當part取值為QUERY時,根據key值取出對應的Value值。

  • 返回說明

    返回STRING類型。返回規則如下:

    • urlpartkey值為NULL時,返回NULL。

    • part取值不符合要求時,返回報錯。

  • 樣本

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

PARSE_URL_TUPLE

  • 命令格式

    string parse_url_tuple(string <url>, string <key1>, string <key2>,...)
  • 命令說明

    url解析後,按照輸入的一組鍵key1key2等抽取各個鍵指定的字串。該功能與PARSE_URL類似,但它可以同時提取多個鍵對應的字串,效能更優。

  • 參數說明

    • url:必填。STRING類型。URL連結。無效URL連結會返回報錯。

    • key1key2:必填。STRING類型。指定要抽取的鍵。取值範圍如下:

      • HOST:擷取主機地址,可以為網域名稱或IP地址。

      • PATH:擷取網路資源在伺服器中的路徑。

      • QUERY:查詢字串,指代待查詢的內容。

      • REF:擷取URL注釋。滑鼠移至上方至URL連結上時顯示的內容。

      • PROTOCOL:擷取協議類型。

      • AUTHORITY:擷取伺服器的網域名稱或IP地址、連接埠號碼和使用者鑒權資訊(例如使用者名稱、密碼)。

      • FILE:擷取網路資源在伺服器中的路徑和待查詢的內容,即由PATH和QUERY組成。

      • USERINFO:使用者鑒權資訊。

      • QUERY:<KEY>:擷取查詢字串中指定欄位(Key)的取值。

      不區分大小寫。不在該範圍內的取值會返回報錯。

  • 返回說明

    返回STRING類型。urlkey值為NULL時,返回報錯。

  • 樣本

    抽取file://username:password@example.com:8042/over/there/index.dtb?type=animal&name=narwhal#nose中各個鍵對應的字串。命令樣本如下。

    select parse_url_tuple('file://username:password@example.com:8042/over/there/index.dtb?type=animal&name=narwhal#nose', 'HOST', 'PATH', 'QUERY', 'REF', 'PROTOCOL', 'AUTHORITY', 'FILE', 'USERINFO', 'QUERY:type', 'QUERY:name') as (item0, item1, item2, item3, item4, item5, item6, item7, item8, item9);

    返回結果如下。

    +------------+------------+------------+------------+------------+------------+------------+------------+------------+------------+
    | item0      | item1      | item2      | item3      | item4      | item5      | item6      | item7      | item8      | item9      |
    +------------+------------+------------+------------+------------+------------+------------+------------+------------+------------+
    | example.com | /over/there/index.dtb | type=animal&name=narwhal | nose       | file       | username:password@example.com:8042 | /over/there/index.dtb?type=animal&name=narwhal | username:password | animal     | narwhal    |
    +------------+------------+------------+------------+------------+------------+------------+------------+------------+------------+

REGEXP_COUNT

  • 命令格式

    bigint regexp_count(string <source>, string <pattern>[, bigint <start_position>])
  • 命令說明

    計算source中從start_position位置開始,匹配指定pattern的子串數。

  • 參數說明

    • source:必填。STRING類型。待搜尋的字串,其他類型會返回報錯。

    • pattern:必填。STRING類型常量或Regex。待匹配的模型。更多Regex編寫規範,請參見RLIKE字元匹配pattern為空白串或其他類型時返回報錯。

    • start_position:可選。BIGINT類型常量,必須大於0。其他類型或值小於等於0時返回報錯。不指定時預設為1,表示從source的第一個字元開始匹配。

  • 傳回值說明

    返回BIGINT類型。返回規則如下:

    • 如果沒有匹配成功,返回0。

    • sourcepatternstart_position值為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);
    • 樣本3:計算:出現在JSON字串{"account_id":123456789,"account_name":"allen","location":"hangzhou","bill":100}中的次數。命令樣本如下。

      --返回4。
      select regexp_count('{"account_id":123456789,"account_name":"allen","location":"hangzhou","bill":100}',':');

REGEXP_EXTRACT

  • 命令格式

    string regexp_extract(string <source>, string <pattern>[, bigint <groupid>])
    說明

    REGEXP_EXTRACT函數在Hive相容的資料類型版本中遵循Java regex規範。而在1.0和2.0資料類型版本中,則遵循MaxCompute的規範。

  • 命令說明

    將字串source按照pattern的分組規則進行字串匹配,返回第groupid個組匹配到的字串內容。

  • 參數說明

    • source:必填。STRING類型,待拆分的字串。

    • pattern:必填。STRING類型常量或Regex。待匹配的模型。更多Regex編寫規範,請參見RLIKE字元匹配

    • groupid:可選。BIGINT類型常量,必須大於等於0。

    說明

    資料以UTF-8格式儲存。對於中文字元可以用對應的16進位編碼錶示,中文字元編碼的範圍是[\\x{4e00},\\x{9fa5}]

  • 傳回值說明

    返回STRING類型。返回規則如下:

    • 如果pattern為空白串或pattern中沒有分組,返回報錯。

    • groupid非BIGINT類型或小於0時,返回報錯。不指定時預設為1,表示返回第一個組。如果groupid等於0,則返回滿足整個pattern的子串。

    • sourcepatterngroupid值為NULL時,返回NULL。

REGEXP_EXTRACT_ALL

  • 命令格式

    array<T> regexp_extract_all(string <source>, string <pattern>[,bigint <group_id>])
  • 命令說明

    在字串中尋找所有出現的Regex匹配模式的子字串,並把找到的字串以數組返回。

  • 參數說明

    • source:必填。STRING類型。待分析的字串。

    • pattern:必填。STRING類型。待匹配的模型,可以是STRING類型常量或Regex。更多Regex編寫規範,請參見RLIKE字元匹配

    • group_id:可選。BIGINT類型。返回指定組的所有匹配結果,必須大於等於0。如果不指定該值, 預設返回group_id1的所有匹配結果;如果等於0pattern將被當作一個整體進行匹配。

  • 傳回值說明

    返回ARRAY類型。如果指定group_id,返回該group_id匹配的所有結果組成的數組;如果不指定group_id, 則返回group_id1的所有匹配結果組成的數組。

  • 樣本

    • 不指定group_id預設返回第一個group_id匹配到的結果。

      SELECT regexp_extract_all('100-200, 300-400', '(\\d+)-(\\d+)');

      結果如下。

      +------------+
      | _c0        |
      +------------+
      | [100,300] |
      +------------+
    • 指定group_id值為2,返回第二個group_id匹配到的結果。

      SELECT regexp_extract_all('100-200, 300-400', '(\\d+)-(\\d+)',2);

      結果如下。

      +------------+
      | _c0        |
      +------------+
      | [200,400] |
      +------------+

REGEXP_INSTR

  • 命令格式

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

    計算字串sourcestart_position開始,與patternoccurrence次匹配的子串的起始或結束位置。

  • 參數說明

    • source:必填。STRING類型。源字串。

    • pattern:必填。STRING類型常量或Regex。待匹配的模型。更多Regex編寫規範,請參見RLIKE字元匹配pattern為空白串時返回報錯。

    • start_position:可選。BIGINT類型常量。搜尋的開始位置。不指定時預設值為1。

    • occurrence:可選。BIGINT類型常量。指定匹配次數,不指定時預設值為1,表示搜尋第一次出現的位置。

    • return_option:可選。BIGINT類型常量。指定返回的位置。值為0或1,不指定時預設值為0,其他類型或不允許的值會返回報錯。0表示返回匹配的開始位置,1表示返回匹配的結束位置。

  • 傳回值說明

    返回BIGINT類型。return_option指定匹配的子串在source中的開始或結束位置。返回規則如下:

    • 如果pattern為空白字串,返回報錯。

    • start_positionoccurrence非BIGINT類型或小於等於0時,返回報錯。

    • sourcepatternstart_positionoccurrencereturn_option值為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>])
    說明

    REGEXP_REPLACE函數在Hive相容的資料類型版本中遵循Java regex規範。而在1.0和2.0資料類型版本中,則遵循MaxCompute的規範。

  • 命令說明

    source字串中第occurrence次匹配pattern的子串替換成指定字串replace_string後返回結果字串。

  • 參數說明

    • source:必填。STRING類型,待替換的字串。

    • pattern:必填。STRING類型常量或Regex。待匹配的模型。更多Regex編寫規範,請參見RLIKE字元匹配pattern為空白串時返回報錯。

    • replace_string:必填。STRING類型,將匹配pattern的字串替換後的字串。

      說明
      • 如果replace_string為空白字串函數將刪除匹配pattern的字串後返回。

      • replace_string中可以包含後向引用\n,表示插入與pattern中第n個擷取的群組匹配的子字串,其中n的取值範圍為1~9,\0表示整個pattern。在使用時需要對反斜線進行轉義:\\1,或者使用原始字串(Raw String):R'(\1)'。

    • occurrence:可選。BIGINT類型常量,必須大於等於0,表示將第occurrence次匹配的字串替換為replace_string,為0時表示替換所有匹配的子串。為其他類型或小於0時,返回報錯。預設值為0。

  • 傳回值說明

    返回STRING類型。返回規則如下:

    • 當引用不存在的組時,其結果未定義。

    • 如果replace_string值為NULL且pattern有匹配,返回NULL。

    • 如果replace_string值為NULL但pattern不匹配,返回原字串。

    • sourcepatternoccurrence值為NULL時,返回NULL。

  • 樣本

    • 樣本1:將字串按照指定規則進行替換。命令樣本如下:

      --返回Abcd。
      select regexp_replace("abcd", "a", "A", 0);
      --返回bcd。
      select regexp_replace("abcd", "a", "", 0);
      --返回19700101。
      select regexp_replace("1970-01-01", "-", "", 0);
      --返回abc。
      select regexp_replace("a1b2c3", "[0-9]", "", 0);
      --返回a1b2c。
      select regexp_replace("a1b2c3", "[0-9]", "", 3);
    • 樣本2:將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);
    • 樣本3:將abcd字串中與指定規則匹配的字串進行替換。命令樣本如下。

      --返回a b c d 。
      select regexp_replace('abcd', '(.)', '\\1 ', 0);
      --返回a bcd。
      select regexp_replace('abcd', '(.)', '\\1 ', 1);
      --返回d。
      select regexp_replace("abcd", "(.*)(.)$", "\\2", 0);
    • 樣本4:假設表url_set中列名為URL的資料格式為www.simple@xxx.com,且每行的xxx完全不同,現需要將列中www後的所有內容都替換掉。命令樣本如下。

      --返回結果為wwwtest。
      select regexp_replace(url,'(www)(.*)','wwwtest',0) from url_set;
    • 樣本5:任一輸入參數為NULL。命令樣本如下。

      --返回NULL。
      select regexp_replace('abcd', '(.)', null, 0);
    • 樣本6:引用不存在的組。命令樣本如下。

      --因為pattern中只定義了一個組,引用的第二個組不存在。
      --請避免這樣使用,引用不存在的組的結果未定義。
      regexp_replace("abcd", "(.)", "\\2", 0) = "" 或 "abcd"
      --因為在pattern中沒有組的定義,所以\1引用了不存在的組,
      --請避免這樣使用,引用不存在的組的結果未定義。
      regexp_replace("abcd", "a", "\\1", 0) = "bcd" 或 "abcd"

REGEXP_SUBSTR

  • 命令格式

    string regexp_substr(string <source>, string <pattern>[, bigint <start_position>[, bigint <occurrence>]])
  • 命令說明

    返回從start_position位置開始,source中第occurrence次匹配指定pattern的子串。

  • 參數說明

    • source:必填。STRING類型。待搜尋的字串。

    • pattern:必填。STRING類型常量或Regex。待匹配的模型。更多Regex編寫規範,請參見RLIKE字元匹配

    • start_position:可選。其他BIGINT常量,必須大於0。不指定時預設為1,表示從source的第一個字元開始匹配。

    • occurrence:可選。BIGINT常量,必須大於0。不指定時預設為1,表示返回第一次匹配的子串。

  • 傳回值說明

    返回STRING類型。返回規則如下:

    • 如果pattern為空白字串,返回報錯。

    • 沒有匹配時,返回NULL。

    • start_positionoccurrence非BIGINT類型或小於等於0時,返回報錯。

    • sourcepatternstart_positionoccurrencereturn_option值為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);

REPEAT

  • 命令格式

    string repeat(string <str>, bigint <n>)
  • 命令說明

    返回將str重複n次後的字串。

  • 參數說明

    • str:必填。STRING類型。如果輸入為BIGINT、DOUBLE、DECIMAL或DATETIME類型,則會隱式轉換為STRING類型後參與運算。

    • n:必填。BIGINT類型。長度不超過2 MB。

  • 傳回值說明

    返回STRING類型。返回規則如下:

    • str非STRING、BIGINT、DOUBLE、DECIMAL或DATETIME類型時,返回報錯。

    • n為空白時,返回報錯。

    • strn值為NULL時,返回NULL。

  • 樣本

    • 樣本1:將字串abc重複5次。命令樣本如下。

      --返回abcabcabcabcabc。
      select repeat('abc', 5); 
    • 樣本2:任一輸入參數為NULL。命令樣本如下。

      --返回NULL。
      select repeat('abc', null);

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

REVERSE

  • 命令格式

    string reverse(string <str>)
  • 命令說明

    返回倒序字串。

  • 參數說明

    str:必填。STRING類型。如果輸入為BIGINT、DOUBLE、DECIMAL或DATETIME類型,則會隱式轉換為STRING類型後參與運算。

  • 傳回值說明

    返回STRING類型。返回規則如下:

    • str非STRING、BIGINT、DOUBLE、DECIMAL或DATETIME類型時,返回報錯。

    • str值為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);

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

RTRIM

  • 命令格式

    string rtrim(string <str>[, <trimChars>])
    string trim(trailing [<trimChars>] from <str>)
  • 命令說明

    str的右端去除字元:

    • 如果未指定trimChars,則預設去除空白字元。

    • 如果指定了trimChars,則以trimChars中包含的字元作為一個集合,從str的右端去除儘可能長的所有字元都在集合trimChars中的子串。

  • 參數說明

    • str:必填。STRING類型。待去除右端字元的字串。如果輸入為BIGINT、DECIMAL、DOUBLE或DATETIME類型,則會隱式轉換為STRING類型後參與運算。

    • trimChars:可選。String類型。待去除的字元。

  • 傳回值說明

    返回為STRING類型。返回規則如下:

    • str非STRING、BIGINT、DOUBLE、DECIMAL或DATETIME類型時,返回報錯。

    • strtrimChars值為NULL時,返回NULL。

  • 樣本

    • 樣本1:去除字串 yxTxyomxx 的右邊空格。命令樣本如下。

      --返回字串 yxTxyomxx。
      select rtrim(' yxTxyomxx ');
      --等效於如下語句。
      select trim(trailing from ' yxTxyomxx ');
    • 樣本2:去除字串yxTxyomxx右端所有字元都在集合xy中的子串。

      --返回yxTxyom,只要右端遇到x或者y就會被去掉。
      select rtrim('yxTxyomxx', 'xy');
      --等效於如下語句。
      select trim(trailing 'xy' from 'yxTxyomxx');
    • 樣本3:輸入參數為NULL。命令樣本如下。

      --返回NULL。
      select rtrim(null);
      select ltrim('yxTxyomxx', 'null');

SOUNDEX

  • 命令格式

    string soundex(string <str>)
  • 命令說明

    將一般字元串轉換為SOUNDEX字串。

  • 參數說明

    str:必填。STRING類型。待轉換的字串。此函數為MaxCompute 2.0擴充函數。

  • 傳回值說明

    返回STRING類型。str值為NULL時,返回NULL。

  • 樣本

    • 樣本1:將字串hello轉換為SOUNDEX字串。命令樣本如下。

      --返回H400。
      select soundex('hello');
    • 樣本2:輸入參數為NULL。命令樣本如下。

      --返回NULL。
      select soundex(null);

SPACE

  • 命令格式

    string space(bigint <n>)
  • 命令說明

    產生空白字元串,長度為n

  • 參數說明

    n:必填。BIGINT類型。長度不超過2 MB。

  • 傳回值說明

    返回STRING類型。返回規則如下:

    • n為空白時,返回報錯。

    • n值為NULL時,返回NULL。

  • 樣本

    --返回10。
    select length(space(10));

SPLIT

  • 命令格式

    split(<str>, <pat>, [<trimTailEmpty>])
  • 參數說明

      • str:必填。STRING類型。指被分割的字串。

      • pat:必填。STRING類型的分隔字元。支援Regex。更多Regex資訊,請參見RLIKE字元匹配

      • trimTailEmpty: 選擇性參數,預設值為true,設定為false保留末尾Null 字元串 (Hive相容)。

  • 傳回值說明

    返回ARRAY數組。數組中的元素為STRING類型。

  • 樣本

    --返回["a"," b"," c"]
    select split("a, b, c", ",");
    
    --預設不返回Null 字元串
    select split("a, b, c,,", ",");
    --返回結果
    +------------+
    | _c0        |
    +------------+
    | ["a"," b"," c"] |
    +------------+
    
    --如果需要返回Null 字元串
    select split("a, b, c,,", ",", false);
    --返回結果
    +------------+
    | _c0        |
    +------------+
    | ["a"," b"," c","",""] |
    +------------+

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:BIGINT類型常量,大於等於start。表示返回段的截止編號,可省略,預設時表示和start取值相等,返回start指定的段。

  • 傳回值說明

    返回STRING類型。返回規則如下:

    • 如果start的值大於切分後實際的分段數,例如字串拆分完有6個片段,start大於6,返回空串。

    • 如果separator不存在於str中,且start指定為1,返回整個str。如果str為空白字串,則輸出Null 字元串。

    • 如果separator為空白字串,則返回原字串str

    • 如果end大於片段個數,返回從start開始的子串。

    • str非STRING、BIGINT、DOUBLE、DECIMAL或DATETIME類型時,返回報錯。

    • separator非STRING類型常量時,返回報錯。

    • startend非BIGINT類型常量時,返回報錯。

    • 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。

      重要
      • 如果setproject odps.function.strictmode=false時:length值小於0時,會返回空白。

      • 如果setproject odps.function.strictmode=true時:length值小於0時,會返回錯誤。

  • 傳回值說明

    返回STRING類型。返回規則如下:

    • str非STRING、BIGINT、DECIMAL、DOUBLE或DATETIME類型時,返回報錯。

    • length非BIGINT類型或值小於等於0時,返回報錯。

    • length被省略時,返回到str結尾的子串。

    • strstart_positionlength值為NULL時,返回NULL。

  • 樣本

    • 樣本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類型。

    • start_position:必填。INT類型,起始位置為1。當start_position為0時,返回空串。當start_position為負數時,表示開始位置是從字串的結尾往前倒數,最後一個字元是-1,依次往前倒數。

    • length:可選。BIGINT類型,表示子串的長度值。值必須大於0。

  • 傳回值說明

    返回STRING類型。返回規則如下:

    • str非STRING或BINARY類型時,返回報錯。

    • length非BIGINT類型或值小於等於0時,返回報錯。

    • length被省略時,返回到str結尾的子串。

    • strstart_positionlength值為NULL時,返回NULL。

  • 樣本

    • 樣本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);

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://www.alibabacloud.com。命令樣本如下。

      --返回https://www.alibabacloud。
      select substring_index('https://www.alibabacloud.com', '.', 2);
      --返回alibabacloud.com。
      select substring_index('https://www.alibabacloud.com', '.', -2);
    • 樣本2:任一輸入參數為NULL。命令樣本如下。

      --返回NULL。
      select substring_index('https://www.alibabacloud.com', null, 2);

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類型。返回規則如下:

    • value非BOOLEAN、BIGINT、DECIMAL或DOUBLE類型時,返回報錯。

    • value值為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);

TO_JSON

  • 命令格式

    string 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字串。

  • 傳回值說明

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

TOLOWER

  • 命令格式

    string tolower(string <source>)
  • 命令說明

    將字串source中的大寫字元轉換為對應的小寫字元。

  • 參數說明

    source:必填。STRING類型。如果輸入為BIGINT、DOUBLE、DECIMAL或DATETIME類型,則會隱式轉換為STRING類型後參與運算。目前只支援英文字元。

  • 傳回值說明

    返回STRING類型。返回規則如下:

    • source非STRING、BIGINT、DOUBLE、DECIMAL或DATETIME類型時,返回報錯。

    • source值為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類型。返回規則如下:

    • source非STRING、BIGINT、DOUBLE、DECIMAL或DATETIME類型時,返回報錯。

    • source值為NULL時,返回NULL。

  • 樣本

    • 樣本1:將字串中的小寫字元轉換為大寫字元。命令樣本如下。

      --返回ABCD。
      select toupper('aBcd');
      --返回中國FIGHTING。
      select toupper('中國Fighting');
    • 樣本2:輸入參數為NULL。命令樣本如下。

      --返回NULL。
      select toupper(null);

TRANSLATE

  • 命令格式

    string translate(string|varchar <str1>, string|varchar <str2>, string|varchar <str3>)
  • 命令說明

    str1出現在str2中的每個字元替換成str3中相對應的字元。無匹配則不替換。此函數為MaxCompute 2.0擴充函數。

  • 傳回值說明

    返回STRING類型。如果任一輸入參數值為NULL,返回NULL。

  • 樣本

    • 樣本1:將字串ababab出現在abab中的每個字元替換成cd中的相應字元。命令樣本如下。

      --返回cdcdcd。
      select translate('ababab','abab','cd');
    • 樣本2:將字串ababab出現在abab中的每個字元替換成cdefg中的相應字元。命令樣本如下。

      --返回cdcdcd。
      select translate('ababab','abab','cdefg');
    • 樣本3:任一輸入參數為NULL。命令樣本如下。

      --返回NULL。
      select translate('ababab','cd',null);

TRIM

  • 命令格式

    string trim(string <str>[,<trimChars>])
    string trim([BOTH] [<trimChars>] from <str>)
  • 命令說明

    str的左右兩端去除字元:

    • 如果未指定trimChars,則預設去除空白字元。

    • 如果指定了trimChars,則以trimChars中包含的字元作為一個集合,從str的左右兩端去除儘可能長的所有字元都在集合trimChars中的子串。

  • 參數說明

    • str:必填。STRING類型。待去除左右兩端字元的字串。如果輸入為BIGINT、DECIMAL、DOUBLE或DATETIME類型,則會隱式轉換為STRING類型後參與運算。

    • trimChars:可選。String類型。待去除的字元。

  • 傳回值說明

    返回為STRING類型。返回規則如下:

    • str非STRING、BIGINT、DOUBLE、DECIMAL或DATETIME類型時,返回報錯。

    • strtrimChars值為NULL時,返回NULL。

  • 樣本

    • 樣本1:去除字串 yxTxyomxx 的左右空格。命令樣本如下。

      --返回字串yxTxyomxx。
      select trim(' yxTxyomxx ');
      --等效於如下語句。
      select trim(both from ' yxTxyomxx ');
      select trim(from ' yxTxyomxx ');
    • 樣本2:去除字串yxTxyomxx左右兩端所有字元都在集合xy中的子串。

      --返回Txyom,只要左右兩端遇到x或者y就會被去掉。
      select trim('yxTxyomxx', 'xy');
      --等效於如下語句。
      select trim(both 'xy' from 'yxTxyomxx');
      select trim('xy' from 'yxTxyomxx');
    • 樣本3:輸入參數為NULL。命令樣本如下。

      --返回NULL。
      select trim(null);
      select trim('yxTxyomxx', null);

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編碼的字串。inputencoding值為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');

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類型。inputencoding值為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');

相關文檔

當以上函數不能滿足您的業務需求,您可以自行編寫代碼邏輯建立自訂函數(UDF),以滿足多樣化業務需求,請參見MaxCompute UDF概述