當您需要對儲存在表中的字串資料進行截取、拼接、轉化、比較、搜尋等操作,您可以使用MaxCompute支援的字串函數對指定字串進行靈活處理。本文為您介紹MaxCompute支援的字串函數的命令格式、參數說明及樣本。
MaxCompute SQL支援的字串函數如下。
函數 | 功能 |
返回字串的第一個字元的ASCII碼。 | |
計算A字串出現在B字串中的字元個數。 | |
將指定ASCII碼轉換成字元。 | |
將字串串連在一起。 | |
將參數中的所有字串按照指定的分隔字元串連在一起。 | |
將字串按照指定編碼格式解碼。 | |
將字串按照指定編碼格式編碼。 | |
在以逗號分隔的字串中尋找指定字串的位置。 | |
將數字轉化為指定格式的字串。 | |
將指定編碼格式的位元據轉換為UTF-8格式的字串。 | |
根據給定的JSON字串和輸出格式資訊,返回ARRAY、MAP或STRUCT類型。 | |
在一個標準JSON字串中,按照指定方式抽取指定的字串。 | |
將字串轉換為固定格式的字串,單詞之間以空格分隔。轉換後的格式為:字串中每個單字首大寫,其餘小寫。 | |
計算A字串在B字串中的位置。 | |
判斷字串是否可以從指定的A字元集轉換為B字元集。 | |
在一個標準的JSON字串中,按照輸入的一組鍵抽取各個鍵指定的字串。 | |
將字串拆分為Key-Value對,並將Key-Value對分開,返回Key對應的Value。 | |
將字串拆分為多個Key-Value對,並將Key-Value對分開,返回多個Key對應的Value。 | |
計算字串的長度。 | |
計算字串以位元組為單位的長度。 | |
在字串中尋找另一指定字串的位置。 | |
將字串向左補足到指定位元。 | |
去除字串的左端字元。 | |
返回基於字串運算式計算的Hash值。 | |
計算字串的MD5值。 | |
對URL進行解析返回指定部分的資訊。 | |
對URL進行解析返回多個部分的資訊。 | |
計算字串從指定位置開始,匹配指定規則的子串數。 | |
將字串按照指定規則拆分為組後,返回指定組的字串。 | |
在字串中尋找所有出現的Regex匹配的子字串,並把找到的字串以數組形式返回。 | |
返回字串從指定位置開始,與指定規則匹配指定次數的子串的起始或結束位置。 | |
將字串中,與指定規則在指定次數匹配的子串替換為另一字串。 | |
返回字串中,從指定位置開始,與指定規則匹配指定次數的子串。 | |
返回將字串重複指定次數後的結果。 | |
將字串中與指定字串匹配的子串替換為另一字串。 | |
返回倒序字串。 | |
將字串向右補足到指定位元。 | |
去除字串的右端字元。 | |
將一般字元串替換為SOUNDEX字串。 | |
產生空白字元串。 | |
按照分隔字元分割字串後返回數組。 | |
按照分隔字元拆分字串,返回指定部分的子串。 | |
返回STRING類型字串從指定位置開始,指定長度的子串。 | |
返回STRING或BINARY類型字串從指定位置開始,指定長度的子串。 | |
截取字串指定分隔字元前的字串。 | |
將BOOLEAN、BIGINT、DECIMAL或DOUBLE類型值轉為對應的STRING類型表示。 | |
將指定的複雜類型輸出為JSON字串。 | |
將字串中的英文字元轉換為小寫形式。 | |
將字串中的英文字元轉換為大寫形式。 | |
將A出現在B中的字串替換為C字串。 | |
去除字串的左右兩端字元。 | |
將字串從 | |
將字串編碼為 |
注意事項
升級到MaxCompute 2.0後,產品擴充了部分函數。如果您用到的函數涉及新資料類型(TINYINT、SMALLINT、INT、FLOAT、VARCHAR、TIMESTAMP或BINARY),在使用擴充函數時,需要執行如下語句開啟新資料類型開關:
使用限制
以下函數只支援英文字元的轉換:
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中。
參數說明
str1、str2:必填。STRING類型,必須為有效UTF-8字串。如果對比過程中發現有無效字元(非UNICODE編碼),則返回負值。
傳回值說明
返回BIGINT類型。str1或str2值為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數組。
輸入為字串:將多個字串串連在一起,產生一個新的字串。
參數說明
a、b:必填。ARRAY數組。
array<T>
中的T
指代ARRAY數組元素的資料類型,數組中的元素可以為任意類型。a和b中元素的資料類型必須一致。數組中的元素為NULL值時會參與運算。str1、str2:必填。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:連接字串
aabc
和abcde
。命令樣本如下。--返回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類型的分隔字元。
str1、str2:至少要指定2個字串。STRING類型。如果輸入為BIGINT、DECIMAL、DOUBLE或DATETIME類型,則會隱式轉換為STRING類型後參與運算。
a:必填。ARRAY數組。數組中的元素為STRING類型。
傳回值說明
返回STRING類型或STRUCT類型。返回規則如下:
str1或str2非STRING、BIGINT、DECIMAL、DOUBLE或DATETIME類型時,返回報錯。
如果沒有輸入參數或任一輸入參數值為NULL,返回NULL。
樣本
樣本1:將字串
name
和hanmeimei
通過:
串連。命令樣本如下。--返回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類型。str或charset值為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類型。str或charset值為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中無法匹配到str1或str1中包含逗號(,)時,返回0。
當str1或str2值為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<0
或expr2>340
時,會返回報錯。expr1或expr2值為空白或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-8、UTF-16、UTF-16LE、UTF-16BE、ISO-8859-1、US-ASCII、GB2312、GBK和GB18030。
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字串jsonStr和schema資訊,返回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來解析,而不再需要額外使用
replace
或regexp_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。表示str2在str1中第nth_appearance次匹配的位置。如果nth_appearance為其他類型或小於等於0,則返回報錯。
傳回值說明
返回BIGINT類型。返回規則如下:
如果在str1中未找到str2,則返回0。
如果str2為空白串,則總能匹配成功,例如
select instr('abc','');
會返回1。str1、str2、start_position或nth_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_encoding、to_encoding:必填。STRING類型,源及目標字元集。
傳回值說明
返回BOOLEAN類型。返回規則如下:
如果str能夠成功轉換,則返回True,否則返回False。
str、from_encoding或to_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類型。待拆分的字串。
split1、split2:可選。STRING類型。用於作為分隔字元的字串,按照指定的兩個分隔字元拆分源字串。如果運算式中沒有指定這兩項,預設split1為
";"
,split2為":"
。當某個被split1拆分後的字串中有多個split2時,返回結果未定義。key:必填。STRING類型。將字串按照split1和split2拆分後,返回key值對應的Value。
傳回值說明
返回STRING類型。返回規則如下:
split1或split2值為NULL時,返回NULL。
str或key值為NULL或沒有匹配的key時,返回NULL。
如果有多個Key-Value匹配,返回第一個匹配上的key對應的Value。
樣本
樣本1:將字串
0:1/;1:2
拆分為Key-Value對,返回Key值1
對應的Value。命令樣本如下。--返回2。 select keyvalue('0:1/;1:2', 1);
沒有指定split1和split2,預設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類型。待拆分的字串。
split1、split2:必填。STRING類型。用於作為分隔字元的字串,按照指定的兩個分隔字元拆分源字串。當某個被split1拆分後的字串中有多個split2時,返回結果未定義。
key:必填。STRING類型。將字串按照split1和split2拆分後,返回key值對應的Value。
傳回值說明
返回STRING類型。返回規則如下:
split1或split2值為NULL時,返回NULL。
str或key值為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。
str或substr值為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類型時,返回報錯。
str或trimChars值為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類型。返回規則如下:
url、part或key值為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解析後,按照輸入的一組鍵key1、key2等抽取各個鍵指定的字串。該功能與PARSE_URL類似,但它可以同時提取多個鍵對應的字串,效能更優。
參數說明
url:必填。STRING類型。URL連結。無效URL連結會返回報錯。
key1、key2:必填。STRING類型。指定要抽取的鍵。取值範圍如下:
HOST:擷取主機地址,可以為網域名稱或IP地址。
PATH:擷取網路資源在伺服器中的路徑。
QUERY:查詢字串,指代待查詢的內容。
REF:擷取URL注釋。滑鼠移至上方至URL連結上時顯示的內容。
PROTOCOL:擷取協議類型。
AUTHORITY:擷取伺服器的網域名稱或IP地址、連接埠號碼和使用者鑒權資訊(例如使用者名稱、密碼)。
FILE:擷取網路資源在伺服器中的路徑和待查詢的內容,即由PATH和QUERY組成。
USERINFO:使用者鑒權資訊。
QUERY:<KEY>:擷取查詢字串中指定欄位(Key)的取值。
不區分大小寫。不在該範圍內的取值會返回報錯。
返回說明
返回STRING類型。url或key值為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。
source、pattern或start_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的子串。
source、pattern或groupid值為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_id為1
的所有匹配結果;如果等於0
,pattern將被當作一個整體進行匹配。
傳回值說明
返回ARRAY類型。如果指定group_id,返回該group_id匹配的所有結果組成的數組;如果不指定group_id, 則返回group_id為
1
的所有匹配結果組成的數組。樣本
不指定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>]]])
命令說明
計算字串source從start_position開始,與pattern第occurrence次匹配的子串的起始或結束位置。
參數說明
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_position或occurrence非BIGINT類型或小於等於0時,返回報錯。
source、pattern、start_position、occurrence或return_option值為NULL時,返回NULL。
樣本
樣本1:計算字串
i love www.taobao.com
從3
開始,與o[[:alpha:]]{1}
第2
次匹配的子串開始位置。命令樣本如下。--返回14。 select regexp_instr('i love www.taobao.com', 'o[[:alpha:]]{1}', 3, 2);
樣本2:計算字串
i love www.taobao.com
從3
開始,與o[[:alpha:]]{1}
第2
次匹配的子串結束位置。命令樣本如下。--返回16。 select regexp_instr('i love www.taobao.com', 'o[[:alpha:]]{1}', 3, 2, 1);
樣本3:任一輸入參數為NULL。命令樣本如下。
--返回NULL。 select regexp_instr('i love www.taobao.com', null, 3, 2);
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不匹配,返回原字串。
source、pattern或occurrence值為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_position或occurrence非BIGINT類型或小於等於0時,返回報錯。
source、pattern、start_position、occurrence或return_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為空白時,返回報錯。
str或n值為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類型時,返回報錯。
str或trimChars值為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類型常量時,返回報錯。
start或end非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>])
命令說明
返回字串str從start_position開始,長度為length的子串。
參數說明
str:必填。STRING類型。如果輸入為BIGINT、DECIMAL、DOUBLE或DATETIME類型,則會隱式轉換為STRING類型後參與運算。
start_position:必填。BIGINT類型,預設起始位置為1。
Hive相容資料類型版本:當start_position為0時,與起始位置為1時相同。
1.0和2.0資料類型版本:當start_position為0時,返回NULL。
length:可選。BIGINT類型,表示子串的長度值。值必須大於0。
重要如果
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結尾的子串。
str、start_position或length值為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>])
命令說明
返回字串str從start_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結尾的子串。
str、start_position或length值為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>)
命令說明
截取字串str第count個分隔字元之前的字串。如果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類型時,返回報錯。
str或trimChars值為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編碼的字串。input或encoding值為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類型。input或encoding值為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概述。