全部產品
Search
文件中心

MaxCompute:SUBSTR

更新時間:Aug 06, 2025

返回字串strstart_position開始,長度為length的子串。

命令格式

STRING SUBSTR(STRING <str>, BIGINT <start_position>[, BIGINT <length>])

參數說明

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

  • start_position:必填。BIGINT類型,不同 start_position 值行為說明如下

    start_position值

    參數行為說明

    1

    預設從第一個字元開始

    0

    負數

    預設從最後一個字元開始,若start_position小於-length(指字串str的長度length):

    • 返回Null 字元串。

    • 執行SET odps.sql.bigquery.compatible=true;開啟BigQuery相容模式時,從第一個字元開始。

  • length:可選。BIGINT類型,表示子串的長度值,不指定時預設到str最後一個字元。

    • length為0時,返回Null 字元串;

    • length小於0時,返回Null 字元串。僅在以下flag開啟時,會返回報錯資訊:

      • 執行SETPROJECT odps.sql.bigquery.compatible=true;開啟BigQuery相容模式時,會返回錯誤。

傳回值說明

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

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

  • length非BIGINT類型時,返回報錯。

  • 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);
  • 樣本3:BigQuery相容模式下,當start_position為0時,與起始位置為1時相同。

    -- 返回 apple  
    SET odps.sql.bigquery.compatible=TRUE;  
    SELECT SUBSTR('apple', 0);
    
    -- 等效於  
    SELECT SUBSTR('apple', 1);
  • 樣本4:BigQuery相容模式下,當start_position小於-length(指字串str的長度length)時,與起始位置為1時相同。

    -- 返回 apple
    SET odps.sql.bigquery.compatible=TRUE;
    SELECT SUBSTR('apple', -6);
    
    -- 等效於  
    SELECT SUBSTR('apple', 1);
  • 樣本5:BigQuery相容模式下,length值小於0時,會返回錯誤。

    -- 報錯FAILED: ODPS-0130071:[0,0] Semantic analysis exception - physical plan generation failed: SQL Runtime Unretryable Error: ODPS-0121095:Invalid argument - in function substr/substring, unsupported length value -1
    SET odps.sql.bigquery.compatible=TRUE;
    SELECT SUBSTR('apple',1,-1);

相關函數

SUBSTR函數屬於字串函數,更多尋找字串、轉換字串格式的相關函數請參見字串函數