全部產品
Search
文件中心

IoT Platform:字串函數

更新時間:Jun 30, 2024

您可以在SQL中使用字串函數對指定字串進行靈活處理。本文為您提供SQL支援的字串函數的命令格式、參數說明及樣本,指導您使用字串函數完成開發。

SQL支援的字串函數如下。

函數

功能

ASCII

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

CHAR_MATCHCOUNT

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

CHR

將指定ASCII碼轉換成字元。

CONCAT

將字串串連在一起。

CONCAT_WS

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

FIND_IN_SET

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

FORMAT_NUMBER

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

INITCAP

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

INSTR

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

KEYVALUE

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

LENGTH

計算字串的長度。

LENGTHB

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

LOCATE

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

LPAD

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

LTRIM

去除字串的左端字元。

REGEXP_COUNT

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

REGEXP_EXTRACT

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

REGEXP_INSTR

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

REGEXP_REPLACE

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

REGEXP_SUBSTR

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

REPEAT

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

REPLACE

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

REVERSE

返回倒序字串。

RPAD

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

RTRIM

去除字串的右端字元。

SPACE

產生空白字元串。

SPLIT_PART

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

SUBSTR

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

SUBSTRING

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

SUBSTRING_INDEX

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

TO_CHAR

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

TOLOWER

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

TOUPPER

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

TRANSLATE

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

TRIM

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

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

  • 命令格式

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

    將多個字串串連在一起,產生一個新的字串。

  • 參數說明

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

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

  • 傳回值說明

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

  • 樣本

    • 樣本1:連接字串aabcabcde。命令樣本如下。

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

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

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

CONCAT_WS

  • 命令格式

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

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

  • 參數說明

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

    • str1str2:至少要指定2個字串。STRING類型。如果輸入為BIGINT、DECIMAL、DOUBLE或DATETIME類型,則會隱式轉換為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');

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

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

KEYVALUE

  • 命令格式

    keyvalue(string <str>,[string <split1>,string <split2>,] string <key>)
    keyvalue(string <str>,string <key>) 
  • 命令說明

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

  • 參數說明

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

    • split1split2:可選。STRING類型。用於作為分隔字元的字串,按照指定的兩個分隔字元拆分源字串。如果運算式中沒有指定這兩項,預設split1";"split2":"。當某個被split1拆分後的字串中有多個split2時,返回結果未定義。

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

  • 傳回值說明

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

    • split1split2值為NULL時,返回NULL。

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

    • 如果有多個Key-Value匹配,返回第一個匹配上的key對應的Value。

  • 樣本

    • 樣本1:將字串0:1\;1:2拆分為Key-Value對,返回Key值1對應的Value。命令樣本如下。

      --返回2。
      select keyvalue('0:1\;1:2', 1);

      沒有指定split1split2,預設split1";"split2":"

      經過split1拆分後,Key-Value對為0:1\,1:2。經過split2拆分後變為如下。

      0 1/  
      1 2

      返回Key為1所對應的Value值2。

    • 樣本2:將字串“\;decreaseStore:1\;xcard:1\;isB2C:1\;tf:21910\;cart:1\;shipping:2\;pf:0\;market:shoes\;instPayAmount:0\;”按照“\;”拆分為Key-Value對,再按照":"將Key-Value分開,返回Key值tf對應的Value。命令樣本如下。

      --返回21910。
      select keyvalue("\;decreaseStore:1\;xcard:1\;isB2C:1\;tf:21910\;cart:1\;shipping:2\;pf:0\;market:shoes\;instPayAmount:0\;","\;",":","tf");

      “\;decreaseStore:1\;xcard:1\;isB2C:1\;tf:21910\;cart:1\;shipping:2\;pf:0\;market:shoes\;instPayAmount:0\;”按照“\;”拆分後,得出的Key-Value對如下所示。

      decreaseStore:1,xcard:1,isB2C:1,tf:21910,cart:1,shipping:2,pf:0,market:shoes,instPayAmount:0 

      按照":"拆分後,結果如下所示。

      decreaseStore 1  
      xcard 1  
      isB2C 1  
      tf 21910  
      cart 1  
      shipping 2  
      pf 0  
      market shoes  
      instPayAmount 0

      返回Key為tf對應的Value值21910。

LENGTH

  • 命令格式

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

    計算字串str的長度。

  • 參數說明

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

  • 傳回值說明

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

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

  • 參數說明

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

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>])
  • 命令說明

    將字串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_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>])
  • 命令說明

    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不匹配,返回原字串。

    • sourcepatternoccurrence值為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_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

  • 參數說明

    • 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類型時,返回報錯。

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

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類型常量時,返回報錯。

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

      • start_position為0時,與起始位置為1時相同。

    • length:可選。BIGINT類型,表示子串的長度值。值必須大於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為負,則從右邊開始截取。

  • 參數說明

    • 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類型時,返回報錯。

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