CHAR_MATCHCOUNT

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

命令說明如下:

該函數用於計算str1中有多少個字元出現在str2中。

參數說明:
  • str1,str2:String類型,必須為有效UTF-8字串,如果對比中發現有無效字元則函數返回負值。
  • bigint:傳回值為bigint類型。任一輸入為NULL返回NULL。
樣本如下:
char_matchcount('abd','aabc') = 2
-- str1中得兩個字串'a','b'在str2中出現過

CHR

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

命令說明如下:

該函數用於將給定ASCII碼ascii轉換成字元。

參數說明:
  • ascii:Bigint類型ASCII值,若輸入為String類型或Double類型或Decimal類型會隱式轉換到Bigint類型後參與運算,其它類型拋異常。
  • String:傳回值為String類型。參數範圍是0~255,超過此範圍會引發異常。輸入值為NULL返回NULL。

CONCAT

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

命令說明如下:

該函數的傳回值是將參數中的所有字串串連在一起的結果。

參數說明:
  • a,b等為String類型,若輸入為Bigint,Double,Decimal或者Datetime類型會隱式轉換為String後參與運算,其它類型報異常。
  • String:傳回值為String類型。如果沒有參數或者某個參數為NULL,結果均返回NULL。
樣本如下:
concat('ab','c') = 'abc'
concat() = NULL
concat('a', null, 'b') = NULL

GET_JSON_OBJECT

命令格式如下:
STRING GET_JSON_OBJECT(STRING json,STRING path)

命令說明如下:

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

參數說明:
  • json: String類型,標準的json格式字串。
  • path:String類型,用於描述在json中的path,以$開頭。關於新實現中json path的說明,請參見:JsonPath,$表示根節點, (.)表示child,[number]表示數組下標,對於數組,格式為key[sub1][sub2][sub3]……, [*]返回整個數組,*不支援轉義。
  • String:傳回值為String類型。
说明
  • 如果json為空白或者非法的json格式,返回NULL。
  • 如果path為空白或者不合法(json中不存在)返回NULL。
  • 如果json合法,path也存在則返回對應字串。
樣本一如下:
+----+
json
+----+
{"store":
{"fruit":[{"weight":8,"type":"apple"},{"weight":9,"type":"pear"}],
"bicycle":{"price":19.95,"color":"red"}
},
"email":"amy@only_for_json_udf_test.net",
"owner":"amy"
}
通過以下查詢,可以提取json對象中的資訊:
odps> SELECT get_json_object(src_json.json, '$.owner') FROM src_json;
amy
odps> SELECT get_json_object(src_json.json, '$.store.fruit\[0]') FROM src_json;
{"weight":8,"type":"apple"}
odps> SELECT get_json_object(src_json.json, '$.non_exist_key') FROM src_json;
NULL
樣本二如下:
get_json_object('{"array":[["aaaa",1111],["bbbb",2222],["cccc",3333]]}','$.array[1][1]')= "2222"
get_json_object('{"aaa":"bbb","ccc":{"ddd":"eee","fff":"ggg","hhh":["h0","h1","h2"]},"iii":"jjj"}','$.ccc.hhh[*]') = "["h0","h1","h2"]"
get_json_object('{"aaa":"bbb","ccc":{"ddd":"eee","fff":"ggg","hhh":["h0","h1","h2"]},"iii":"jjj"}','$.ccc.hhh[1]') = "h1"

INSTR

命令格式如下:
bigint instr(string str1, string str2[, bigint start_position[, bigint nth_appearance]])

命令說明如下:

該函數用於計運算元串str2在字串str1中的位置。

參數說明:
  • str1:String類型,搜尋的字串,若輸入為Bigint,Double,Decimal或者Datetime類型會隱式轉換為String後參與運算,其它類型報異常。
  • str2:String類型,要搜尋的子串,若輸入為Bigint,Double,Decimal或者Datetime類型會隱式轉換為String後參與運算,其它類型報異常。
  • start_position:bigint類型,其它類型會拋異常,表示從str1的第幾個字元開始搜尋,預設起始位置是第一個字元位置1。
  • nth_appearance:bigint類型,大於0,表示子串在字串中的第nth_appearance次匹配的位置,如果 nth_appearance為其它類型或小於等於0會拋異常。
  • bigint:傳回值為bigint類型。
说明
  • 如果在str1中未找到str2,返回0。
  • 任一輸入參數為NULL返回NULL。
  • 如果str2為空白串時總是能匹配成功,instr(‘abc’, ‘’) 會返回 1。
樣本如下:
instr('Tech on the net', 'e') = 2
instr('Tech on the net', 'e', 1, 1) = 2
instr('Tech on the net', 'e', 1, 2) = 11
instr('Tech on the net', 'e', 1, 3) = 14

IS_ENCODING

命令格式如下:
boolean is_encoding(string str, string from_encoding, string to_encoding)

命令說明如下:

用於判斷輸入字串str是否可以從指定的一個字元集from_encoding轉為另一個字元集to_encoding。可用於判斷輸入是否為亂碼,通常的用法是將from_encoding設為utf-8,to_encoding設為gbk。

參數說明:
  • str:String類型,輸入為NULL返回NULL。Null 字元串則可以被認為屬於任何字元集。
  • from_encoding,to_encoding:String類型,源及目標字元集。輸入為NULL返回NULL。
  • boolean:傳回值為Boolean類型,如果str能夠成功轉換,則返回true,否則返回false。
樣本如下:
is_encoding('測試', 'utf-8', 'gbk') = true
is_encoding('測試', 'utf-8', 'gbk') = true
-- gbk字型檔中有這兩個繁體字
is_encoding('測試', 'utf-8', 'gb2312') = false
-- gb2312庫中不包括這兩個字

KEYVALUE

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

命令說明如下:

將srcStr(源字串)按split1分成key-value對,按split2將key-value對分開,返回key所對應的value。

參數說明:
  • srcStr輸入待拆分的字串。
  • key:String類型。源字串按照split1和split2拆分後,根據該key值的指定,返回其對應的value。
  • split1,split2:用來作為分隔字元的字串,按照指定的這兩個分隔字元拆分源字串。如果運算式中沒有指定這兩項,預設split1為(;), split2為(:)。當某個被split1拆分後的字串中有多個split2時,返回結果未定義。
傳回值:
  • String 類型;
  • Split1或split2為NULL時,返回NULL。
  • srcStr,key為NULL或者沒有匹配的key時,返回NULL。
  • 如果有多個key-value匹配,返回第一個匹配上的key對應的value。
樣本一:
keyvalue('0:1\;1:2', 1) = '2'
				
说明 源字串為“0:1\;1:2”,因為沒有指定split1和split2,預設split1為";",split2為“:”。

經過split1拆分後,key-value對為0:1\,1:2。

經過split2拆分後變成:
0 1/  
1 2
返回key為1所對應的value值2。
樣本二:
keyvalue("\;decreaseStore:1\;xcard:1\;isB2C:1\;tf:21910\;cart:1\;shipping:2\;pf:0\;market:shoes\;instPayAmount:0\;","\;",":","tf") = "21910" value:21910。
说明 源字串如下所示:
“\;decreaseStore:1\;xcard:1\;isB2C:1\;tf:21910\;cart:1\;shipping:2\;pf:0\;market:shoes\;instPayAmount:0\;”
按照split1“\;”拆分後,得出的key-value對如下所示:
decreaseStore:1,xcard:1,isB2C:1,tf:21910,cart:1,shipping:2,pf:0,market:shoes,instPayAmount:0 
按照split2":"拆分後,結果如下所示:
decreaseStore 1  
 xcard 1  
 isB2C 1  
 tf 21910  
 cart 1  
 shipping 2  
 pf 0  
 market shoes  
 instPayAmount 0

key值為tf,返回其對應的value:21910。

LENGTH

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

命令說明如下:

返回字串str的長度。

參數說明:
  • str:String類型,若輸入為Bigint,Double,Decimal或者Datetime類型會隱式轉換為String後參與運算,其它類型報異常。
  • bigint:傳回值為Bigint類型。若str是NULL返回NULL。如果str非UTF-8編碼格式,返回-1。
樣本如下:
length('hi! 中國') = 6

LENGTHB

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

命令說明如下:

返回字串str的以位元組為單位的長度。

參數說明:

  • str:String類型,若輸入為Bigint,Double,Decimal或者Datetime類型會隱式轉換為String後參與運算,其它類型報異常。
  • bigint:傳回值為Bigint類型。若str是NULL返回NULL。
樣本如下:
lengthb('hi! 中國') = 10

MD5

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

命令說明如下:

計算輸入字串value的md5值。

參數說明:

  • value:String類型,如果輸入類型是Bigint,Double,Decimal或者Datetime會隱式轉換成String類型參與運算,其它類型報異常。輸入為NULL,返回NULL。
  • String:傳回值為String類型。

REGEXP_EXTRACT

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

命令說明如下:

將字串source按照patternRegex的規則拆分,返回第occurrence個group的字元。

參數說明:
  • source:String類型,待搜尋的字串。
  • pattern:String類型常量,pattern為空白串時拋異常,pattern中如果沒有指定group,拋異常。
  • occurrence:Bigint類型常量,必須 >=0,其它類型或小於0時拋異常,不指定時預設為1,表示返回第一個group。若occurrence = 0,返回滿足整個pattern的子串。
  • String:傳回值為String類型,任一輸入為NULL返回NULL。
樣本如下:
regexp_extract('foothebar', 'foo(.*?)(bar)', 1) = the
regexp_extract('foothebar', 'foo(.*?)(bar)', 2) = bar
regexp_extract('foothebar', 'foo(.*?)(bar)', 0) = foothebar
regexp_extract('8d99d8', '8d(\\d+)d8') = 99
-- 如果是在MaxCompute用戶端上提交正則計算的SQL,需要使用兩個"\"作為轉移字元
regexp_extract('foothebar', 'foothebar')
-- 異常返回,pattern中沒有指定group

REGEXP_INSTR

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

命令說明如下:

返回字串source從start_position開始,和pattern第n次(nth_occurrence)匹配的子串的起始/結束位置。任一輸入參數為NULL時返回NULL。

參數說明:
  • source:String類型,待搜尋的字串。
  • pattern:String類型常量,pattern為空白串時拋異常。
  • start_position:Bigint類型常量,搜尋的開始位置。不指定時預設值為1,其它類型或小於等於0的值會拋異常。
  • nth_occurrence:Bigint類型常量,不指定時預設值為1,表示搜尋第一次出現的位置。小於等於0或者其它類型拋異常。
  • return_option:Bigint類型常量,值為0或1,其它類型或不允許的值會拋異常。0表示返回匹配的開始位置,1表示返回匹配的結束位置。
  • bigint:傳回值為Bigint類型。return_option指定的類型返回匹配的子串在source中的開始或結束位置。
樣本如下:
regexp_instr("i love www.taobao.com", "o[[:alpha:]]{1}", 3, 2) = 14

REGEXP_REPLACE

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

命令說明如下:

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

參數說明:
  • source:String類型,要替換的字串。
  • pattern:String類型常量,要匹配的模式,pattern為空白串時拋異常。
  • replace_string:String類型,將匹配的pattern替換成的字串。
  • occurrence:Bigint類型常量,必須大於等於0,表示將第幾次匹配替換成replace_string,為0時表示替換掉所有的匹配子串。其它類型或小於0拋異常。可預設,預設值為0。
  • String:傳回值為String類型,當引用不存在的組時,不進行替換。當輸入source,pattern,occurrence 參數為NULL時返回NULL,若replace_string為NULL且pattern有匹配,返回NULL,replace_string為NULL 但pattern不匹配,則返回原串。
说明 當引用不存在的組時,行為未定義。
樣本如下:
regexp_replace("123.456.7890", "([[:digit:]]{3})\\.([[:digit:]]{3})\\.([[:digit:]]{4})",
"(\\1)\\2-\\3", 0) = "(123)456-7890"
regexp_replace("abcd", "(.)", "\\1 ", 0) = "a b c d "
regexp_replace("abcd", "(.)", "\\1 ", 1) = "a bcd"
regexp_replace("abcd", "(.)", "\\2", 1) = "abcd"
-- 因為pattern中只定義了一個組,引用的第二個組不存在,
-- 請避免這樣使用,引用不存在的組的結果未定義。
regexp_replace("abcd", "(.*)(.)$", "\\2", 0) = "d"
regexp_replace("abcd", "a", "\\1", 0) = "bcd"
-- 因為在pattern中沒有組的定義,所以\1引用了不存在的組,
-- 請避免這樣使用,引用不存在的組的結果未定義。

REGEXP_SUBSTR

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

命令說明如下:

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

參數說明:
  • source:String類型,搜尋的字串。
  • pattern:String類型常量,要匹配的模型,pattern為空白串時拋異常。
  • start_position:Bigint常量,必須大於0。其它類型或小於等於0時拋異常,不指定時預設為1,表示從 source的第一個字元開始匹配。不指定時預設為1,表示從source的第一個字元開始匹配。
  • nth_occurrence:Bigint常量,必須大於0,其它類型或小於等於0時拋異常。不指定時預設為1,表示返回第一次匹配的子串。不指定時預設為1,表示返回第一次匹配的子串。
  • String:傳回值為String類型。任一輸入參數為NULL返回NULL。沒有匹配時返回NULL。
樣本如下:
regexp_substr ("I love aliyun very much", "a[[:alpha:]]{5}") = "aliyun"
regexp_substr('I have 2 apples and 100 bucks!', '[[:blank:]][[:alnum:]]*', 1, 1) = " have"
regexp_substr('I have 2 apples and 100 bucks!', '[[:blank:]][[:alnum:]]*', 1, 2) = " 2"

REGEXP_COUNT

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

命令說明如下:

計算source中從start_position開始,匹配指定模式pattern的子串的次數。

參數說明:
  • source:String類型,搜尋的字串,其它類型報異常。
  • pattern:String類型常量,要匹配的模型,pattern為空白串時拋異常,其它類型報異常。
  • start_position:Bigint類型常量,必須大於0。其它類型或小於等於0時拋異常,不指定時預設為1,表示從source的第一個字元開始匹配。
  • bigint:傳回值為Bigint類型。沒有匹配時返回0。任一輸入參數為NULL返回NULL。
樣本如下:
regexp_count('abababc', 'a.c') = 1
regexp_count('abcde', '[[:alpha:]]{2}', 3) = 1

SPLIT_PART

命令格式如下:
string split_part(string str, string separator, bigint start[, bigint end])

命令說明如下:

依照分隔字元separator拆分字串str,返回從第start部分到第end部分的子串(閉區間)。

參數說明:
  • Str:String類型,要拆分的字串。如果是Bigint,Double,Decimal或者Datetime類型會隱式轉換到string類型後參加運算,其它類型報異常。
  • Separator:String類型常量,拆分用的分隔字元,可以是一個字元,也可以是一個字串,其它類型會引發異常。
  • start:Bigint類型常量,必須大於0。非常量或其它類型拋異常。返回段的開始編號(從1開始),如果沒有指定end,則返回start指定的段。
  • end:Bigint類型常量,大於等於start,否則拋異常。返回段的截止編號,非常量或其他類型會引發異常。可省略,預設時表示最後一部分。
  • String:傳回值為String類型。若任意參數為NULL,返回NULL;若separator為空白串,返回原字串str。
说明
  • 如果separator不存在於str中,且start指定為1,返回整個str。若輸入為空白串,輸出為空白串。
  • 如果start的值大於切分後實際的分段數,例如:字串拆分完有6個片段,但start大於6,返回空串。
  • 若end大於片段個數,按片段個數處理。
樣本如下:
split_part('a,b,c,d', ',', 1) = 'a'
split_part('a,b,c,d', ',', 1, 2) = 'a,b'
split_part('a,b,c,d', ',', 10) = ''

SUBSTR

命令格式如下:
string substr(string str, bigint start_position[, bigint length])

命令說明如下:

返回字串str從start_position開始往後數,長度為length的子串。

參數說明:
  • str:String類型,若輸入為Bigint,Decimal,Double或者Datetime類型會隱式轉換為String後參與運算,其它類型報異常。
  • start_position:Bigint類型,起始位置為1。當start_position為負數時表示開始位置是從字串的結尾往前倒數,最後一個字元是 -1,往前數依次就是-2,-3…,其它類型拋異常。
  • length:Bigint類型,大於0,其它類型或小於等於 0 拋異常。子串的長度。
  • String:傳回值為String類型。若任一輸入為NULL,返回NULL。
说明 當length被省略時,返回到str結尾的子串。
樣本如下:
substr("abc", 2) = "bc"
substr("abc", 2, 1) = "b"
substr("abc",-2,2)="bc"
substr("abc",-3)="abc"

SUBSTRING

命令格式如下:
string substring(string|binary str, int start_position[, int length])

命令說明如下:

返回字串str從start_position開始往後數,長度為length的子串。

參數說明:
  • str:String | Binary類型,若輸入為其它類型返回null或報錯。
  • start_position:Int類型,起始位置為1。當 start_position為負數時表示開始位置是從字串的結尾往前倒數,最後一個字元是-1,往前數依次就是-2,-3…,其它類型拋異常。
  • length:Bigint類型,大於0,其它類型或小於等於0拋異常。子串的長度。
  • String:傳回值為String類型。若任一輸入為NULL,返回NULL。
说明 當length被省略時,返回到str結尾的子串。
樣本如下
substring('abc', 2) = 'bc'
substring('abc', 2, 1) ='"b'
substring('abc',-2,2)='bc'
substring('abc',-3,2)='ab'
substring(BIN(2345),2,3)='001'

TOLOWER

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

命令說明如下:

輸出英文字串source對應的小寫字串。

參數說明:
  • source:String類型,若輸入為Bigint,Double,Decimal或者Datetime類型會隱式轉換為String後參與運算,其它類型報異常。
  • String:傳回值為String類型。輸入為NULL時返回NULL。
樣本如下:
tolower("aBcd") = "abcd"
tolower("哈哈Cd") = "哈哈cd"

TOUPPER

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

命令說明如下:

輸出英文字元source串對應的大寫字串。

參數說明:
  • source:String類型,若輸入為Bigint,Double,Decimal或者Datetime類型會隱式轉換為String後參與運算,其它類型報異常。
  • String:傳回值為String類型。輸入為NULL時返回NULL。
樣本如下:
toupper("aBcd") = "ABCD"
toupper("哈哈Cd") = "哈哈CD"

TO_CHAR

命令格式如下:
string to_char(boolean value)
string to_char(bigint value)
string to_char(double value)
string to_char(decimal value)

命令說明如下:

將Boolean類型、Bigint類型、Decimal類型或者Double類型轉為對應的String類型表示。

參數說明:
  • value:可以接受Boolean類型、Bigint類型、Decimal類型或者Double類型輸入,其它類型拋異常。對 Datetime類型的格式化輸出請參考另一同名函數TO_CHAR 。
  • String:傳回值為String類型。如果輸入為NULL,返回NULL。
樣本如下:
to_char(123) = '123'
to_char(true) = 'TRUE'
to_char(1.23) = '1.23'
to_char(null) = NULL

TRIM

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

命令說明如下:

將輸入字串str去除左右空格。

參數說明:
  • str:String類型,若輸入為Bigint,Decimal,Double或者Datetime類型會隱式轉換為String後參與運算,其它類型報異常。
  • String:傳回值為String類型。輸入為NULL時返回NULL。

LTRIM

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

命令說明如下:

將輸入的字串str去除左邊空格。

參數說明:
  • str:String類型,若輸入為Bigint,Decimal,Double或者Datetime類型會隱式轉換為String後參與運算,其它類型報異常。
  • String:傳回值為String類型。輸入為NULL時返回NULL。
樣本如下:
select ltrim(' abc ') from dual; 
返回: 
+-----+
| _c0 |
+-----+
| abc |
+-----+

RTRIM

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

命令說明如下:

將輸入的字串str去除右邊空格。

參數說明:
  • str:String類型,若輸入為Bigint,Decimal,Double或者Datetime類型會隱式轉換為String後參與運算,其它類型報異常。
  • String:傳回值為String類型。輸入為NULL時返回NULL。
樣本如下:
select rtrim('a abc ') from dual; 
返回: 
+-----+
| _c0 |
+-----+
| a abc |
+-----+

REVERSE

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

命令說明如下:

返回倒序字串。

參數說明:
  • str:String類型,若輸入為Bigint,Double,Decimal或Datetime類型會隱式轉換為String後參與運算,其它類型報異常。
  • String:傳回值為String類型。輸入為NULL時返回NULL。
樣本如下:
select reverse('abcedfg') from dual;
返回: 
+-----+
| _c0 |
+-----+
| gfdecba |
+-----+

SPACE

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

命令說明如下:

空白字元串函數,返回長度為n的字串。

參數說明:
  • n: Bigint類型。長度不超過2M。如果為空白,則拋異常。
  • String:傳回值為String類型。
樣本如下:
select length(space(10)) from dual; ----返回10。 
select space(400000000000) from dual; ----報錯,長度超過2M。

REPEAT

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

命令說明如下:

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

參數說明:
  • str:String類型,若輸入為Bigint,Double,Decimal或Datetime類型會隱式轉換為String後參與運算,其它類型報異常。
  • n: Bigint類型。長度不超過2M。如果為空白,則拋異常。
  • String:傳回值為String類型。
樣本如下:
select repeat('abc',5) from lxw_dual; 
返回:abcabcabcabcabc

ASCII

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

命令說明如下:

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

參數說明:
  • str:String類型,若輸入為Bigint,Double,Decimal或Datetime類型會隱式轉換為String後參與運算,其它類型報異常。
  • Bigint:傳回值為Bigint類型。
樣本如下:
select ascii('abcde') from dual;
傳回值:97

MaxCompute2.0擴充函數

升級到MaxCompute2.0後,產品擴充部分數學函數,新函數若用到新資料類型時,在使用新函數的SQL前,需要加一個set語句:
set odps.sql.type.system.odps2=true;
说明 請在用到該函數的SQL語句前加set odps.sql.type.system.odps2=true;,並與SQL一起提交運行,以便正常使用新資料類型。

下文將為您詳細介紹新擴充的字串函數。

CONCAT_WS

命令格式如下:
string concat_ws(string SEP, string a, string b...)
string concat_ws(string SEP, array)
说明

目前MaxCompute SQL及新版本Mapreduce支援的Set命令分為以下兩種方式:

  • session層級:要使用新資料類型(Tinyint、Smallint、 Int、 Float、Varchar、TIMESTAMP BINARY),需在建表語句前加上set語句set odps.sql.type.system.odps2=true;,並與建表語句一起提交執行。
  • project層級:即支援對project層級進行新類型開啟。project的Owner可根據需要對project進行設定,命令為:
    - setproject odps.sql.type.system.odps2=true;
    							
    對setproject的詳細說明請參見:其他動作

命令說明如下:

傳回值是將參數中的所有字串安裝指定的分隔字元串連在一起的結果。

參數說明:
  • SEP:String類型的分隔字元,若不指定,返回的值異常。
  • a/b等:String類型,若輸入為Bigint,Decimal,Double或Datetime類型會隱式轉換為String後參與運算,其它類型報異常。

傳回值:

返回String類型。如果沒有參數或者某個參數為NULL,結果均返回NULL。

樣本如下:
concat_ws(':','name','hanmeimei')='name:hanmeimei'
concat_ws(':','avg',null,'34')=null

LPAD

命令格式如下:
string lpad(string a, int len, string b)
说明

目前MaxCompute SQL及新版本Mapreduce支援的Set命令分為以下兩種方式:

  • session層級:要使用新資料類型(Tinyint、Smallint、 Int、 Float、Varchar、TIMESTAMP BINARY),需在建表語句前加上set語句set odps.sql.type.system.odps2=true;,並與建表語句一起提交執行。
  • project層級:即支援對project層級進行新類型開啟。project的Owner可根據需要對project進行設定,命令為:
    - setproject odps.sql.type.system.odps2=true;
    							
    對setproject的詳細說明請參見:其他動作

命令說明如下:

用b字串將a字串向左補足到len位。

參數說明:
  • len:Int整型。
  • a/b等:String類型。

傳回值:

為String類型。若len小於a的位元,則返回a從左開始截取len位字元;若len為0則返回空。

樣本如下:
lpad('abcdefgh',10,'12')='12abcdefgh'
lpad('abcdefgh',5,'12')='abcde'
lpad('abcdefgh',0,'12')返回空

RPAD

命令格式如下:
string rpad(string a, int len, string b)
说明

目前MaxCompute SQL及新版本Mapreduce支援的Set命令分為以下兩種方式:

  • session層級:要使用新資料類型(Tinyint、Smallint、 Int、 Float、Varchar、TIMESTAMP BINARY),需在建表語句前加上set語句set odps.sql.type.system.odps2=true;,並與建表語句一起提交執行。
  • project層級:即支援對project層級進行新類型開啟。project的Owner可根據需要對project進行設定,命令為:
    - setproject odps.sql.type.system.odps2=true;
    							
    對setproject的詳細說明請參見:其他動作

命令說明如下:

用b字串將a字串向右補足到len位。
说明

目前MaxCompute SQL及新版本Mapreduce支援的Set命令分為以下兩種方式:

  • session層級:要使用新資料類型(Tinyint、Smallint、 Int、 Float、Varchar、TIMESTAMP BINARY),需在建表語句前加上set語句set odps.sql.type.system.odps2=true;,並與建表語句一起提交執行。
  • project層級:即支援對project層級進行新類型開啟。project的Owner可根據需要對project進行設定,命令為:
    - setproject odps.sql.type.system.odps2=true;
    							
    對setproject的詳細說明請參見:其他動作
參數說明:
  • len:Int整型。
  • a/b等:String類型。

傳回值:

為String類型。若len小於a的位元,則返回a從左開始截取len位字元;若len為0則返回空。

樣本如下:
rpad('abcdefgh',10,'12')='abcdefgh12'
rpad('abcdefgh',5,'12')='abcde'
rpad('abcdefgh',0,'12')返回空

REPLACE

命令格式如下:
string replace(string a, string OLD, string NEW)
说明

目前MaxCompute SQL及新版本Mapreduce支援的Set命令分為以下兩種方式:

  • session層級:要使用新資料類型(Tinyint、Smallint、 Int、 Float、Varchar、TIMESTAMP BINARY),需在建表語句前加上set語句set odps.sql.type.system.odps2=true;,並與建表語句一起提交執行。
  • project層級:即支援對project層級進行新類型開啟。project的Owner可根據需要對project進行設定,命令為:
    - setproject odps.sql.type.system.odps2=true;
    							
    對setproject的詳細說明請參見:其他動作

命令說明如下:

用NEW字串替換a字串中與OLD字串完全重合的部分並返回a。

參數說明:

參數說明:參數都為String類型。

傳回值:

返回String類型,若某個參數為null,則返回null。

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

SOUNDEX

命令格式如下:
string soundex(string a)
说明

目前MaxCompute SQL及新版本Mapreduce支援的Set命令分為以下兩種方式:

  • session層級:要使用新資料類型(Tinyint、Smallint、 Int、 Float、Varchar、TIMESTAMP BINARY),需在建表語句前加上set語句set odps.sql.type.system.odps2=true;,並與建表語句一起提交執行。
  • project層級:即支援對project層級進行新類型開啟。project的Owner可根據需要對project進行設定,命令為:
    - setproject odps.sql.type.system.odps2=true;
    							
    對setproject的詳細說明請參見:其他動作

命令說明如下:

將一般字元串轉換成soundex字串。

參數說明:a為String類型。

傳回值:返回String類型,若輸入為null,則返回null。

樣本如下:
soundex('hello')='H400'

SUBSTRING_INDEX

命令格式如下:
string substring_index(string a, string SEP, int count))
说明

目前MaxCompute SQL及新版本Mapreduce支援的Set命令分為以下兩種方式:

  • session層級:要使用新資料類型(Tinyint、Smallint、 Int、 Float、Varchar、TIMESTAMP BINARY),需在建表語句前加上set語句set odps.sql.type.system.odps2=true;,並與建表語句一起提交執行。
  • project層級:即支援對project層級進行新類型開啟。project的Owner可根據需要對project進行設定,命令為:
    - setproject odps.sql.type.system.odps2=true;
    							
    對setproject的詳細說明請參見:其他動作

命令說明如下:

截取字串a第count分隔字元之前的字串,如count為正則從左邊開始截取,如果為負則從右邊開始截取。

參數說明:a/sep為string類型,count為int類型。

傳回值:

返回String類型,若輸入為null,則返回null。

樣本如下:
substring_index('https://www.alibabacloud.com, '.', 2)='https://www.alibabacloud'
substring_index('https://www.alibabacloud.com', '.', -2)='alibabacloud.com'
substring_index('https://www.alibabacloud.com', null, 2)=null