您可以在SQL中使用字串函數對指定字串進行靈活處理。本文為您提供SQL支援的字串函數的命令格式、參數說明及樣本,指導您使用字串函數完成開發。
SQL支援的字串函數如下。
函數 | 功能 |
返回字串的第一個字元的ASCII碼。 | |
計算A字串出現在B字串中的字元個數。 | |
將指定ASCII碼轉換成字元。 | |
將字串串連在一起。 | |
將參數中的所有字串按照指定的分隔字元串連在一起。 | |
在以逗號分隔的字串中尋找指定字串的位置。 | |
將數字轉化為指定格式的字串。 | |
將字串轉換為固定格式的字串,單詞之間以空格分隔。轉換後的格式為:字串中每個單字首大寫,其餘小寫。 | |
計算A字串在B字串中的位置。 | |
將字串拆分為Key-Value對,並將Key-Value對分開,返回Key對應的Value。 | |
計算字串的長度。 | |
計算字串以位元組為單位的長度。 | |
在字串中尋找另一指定字串的位置。 | |
將字串向左補足到指定位元。 | |
去除字串的左端字元。 | |
計算字串從指定位置開始,匹配指定規則的子串數。 | |
將字串按照指定規則拆分為組後,返回指定組的字串。 | |
返回字串從指定位置開始,與指定規則匹配指定次數的子串的起始或結束位置。 | |
將字串中,與指定規則在指定次數匹配的子串替換為另一字串。 | |
返回字串中,從指定位置開始,與指定規則匹配指定次數的子串。 | |
返回將字串重複指定次數後的結果。 | |
將字串中與指定字串匹配的子串替換為另一字串。 | |
返回倒序字串。 | |
將字串向右補足到指定位元。 | |
去除字串的右端字元。 | |
產生空白字元串。 | |
按照分隔字元拆分字串,返回指定部分的子串。 | |
返回STRING類型字串從指定位置開始,指定長度的子串。 | |
返回STRING或BINARY類型字串從指定位置開始,指定長度的子串。 | |
截取字串指定分隔字元前的字串。 | |
將BOOLEAN、BIGINT、DECIMAL或DOUBLE類型值轉為對應的STRING類型表示。 | |
將字串中的英文字元轉換為小寫形式。 | |
將字串中的英文字元轉換為大寫形式。 | |
將A出現在B中的字串替換為C字串。 | |
去除字串的左右兩端字元。 |
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
命令格式
string concat(string <str1>, string <str2>[,...])
命令說明
將多個字串串連在一起,產生一個新的字串。
參數說明
a、b:必填。ARRAY數組。
array<T>
中的T
指代ARRAY數組元素的資料類型,數組中的元素可以為任意類型。a和b中元素的資料類型必須一致。數組中的元素為NULL值時會參與運算。str1、str2:必填。STRING類型。如果輸入參數為BIGINT、DOUBLE、DECIMAL或DATETIME類型,則會隱式轉換為STRING類型後參與運算,其他類型會返回報錯。
傳回值說明
返回STRING類型。如果沒有參數或任一參數為NULL,返回結果為NULL。
樣本
樣本1:連接字串
aabc
和abcde
。命令樣本如下。--返回aabcabcde。 select concat('aabc','abcde');
樣本2:輸入為空白。命令樣本如下。
--返回NULL。 select concat();
樣本3:任一字串輸入為NULL。命令樣本如下。
--返回NULL。 select concat('aabc', 'abcde', null);
CONCAT_WS
命令格式
string concat_ws(string <separator>, string <str1>, string <str2>[,...])
命令說明
返回將參數中的所有字串或ARRAY數組中的元素按照指定的分隔字元串連在一起的結果。
參數說明
separator:必填。STRING類型的分隔字元。
str1、str2:至少要指定2個字串。STRING類型。如果輸入為BIGINT、DECIMAL、DOUBLE或DATETIME類型,則會隱式轉換為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');
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);
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);
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。
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位。
參數說明
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);
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>])
命令說明
將字串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_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>])
命令說明
將source字串中第occurrence次匹配pattern的子串替換成指定字串replace_string後返回結果字串。
參數說明
source:必填。STRING類型,待替換的字串。
pattern:必填。STRING類型常量或Regex。待匹配的模型。更多Regex編寫規範,請參見RLIKE字元匹配。pattern為空白串時返回報錯。
replace_string:必填。STRING類型,將匹配pattern的字串替換後的字串。
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:將
123.456.7890
字串中與([[:digit:]]{3})\\.([[:digit:]]{3})\\.([[:digit:]]{4})
匹配的所有字串替換為(\\1)\\2-\\3
。命令樣本如下。--返回(123)456-7890。 select regexp_replace('123.456.7890', '([[:digit:]]{3})\\.([[:digit:]]{3})\\.([[:digit:]]{4})', '(\\1)\\2-\\3', 0);
樣本2:將
abcd
字串中與指定規則匹配的字串進行替換。命令樣本如下。--返回a b c d。 select regexp_replace('abcd', '(.)', '\\1 ', 0); --返回a bcd。 select regexp_replace('abcd', '(.)', '\\1 ', 1); --返回abcd。 select regexp_replace('abcd', '(.)', '\\2', 1);
樣本3:假設表url_set中列名為url的資料格式為
www.simple@xxx.com
,且每行的xxx
完全不同,現需要將列中www
後的所有內容都替換掉。命令樣本如下。--返回結果為wwwtest。 select regexp_replace(url,'(www)(.*)','wwwtest',0) from url_set;
樣本4:任一輸入參數為NULL。命令樣本如下。
--返回NULL。 select regexp_replace('abcd', '(.)', null, 0);
樣本5:引用不存在的組。命令樣本如下。
--因為pattern中只定義了一個組,引用的第二個組不存在。 --請避免這樣使用,引用不存在的組的結果未定義。 regexp_replace("abcd", "(.*)(.)$", "\\2", 0) = "d" --因為在pattern中沒有組的定義,所以\1引用了不存在的組, --請避免這樣使用,引用不存在的組的結果未定義。 regexp_replace("abcd", "a", "\\1", 0) = "bcd"
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。
參數說明
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位。
參數說明
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');
SPACE
命令格式
string space(bigint <n>)
命令說明
產生空白字元串,長度為n。
參數說明
n:必填。BIGINT類型。長度不超過2 MB。
傳回值說明
返回STRING類型。返回規則如下:
n為空白時,返回報錯。
n值為NULL時,返回NULL。
樣本
--返回10。 select length(space(10));
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為空白串,則輸出空串。
如果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。
當start_position為0時,與起始位置為1時相同。
length:可選。BIGINT類型,表示子串的長度值。值必須大於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為負,則從右邊開始截取。
參數說明
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);
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中相對應的字元。無匹配則不替換。
傳回值說明
返回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);