SUBSTR

返回字符串strstart_position开始,长度为length的子串。

命令格式

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

参数说明

  • str:必填。STRING类型。如果输入为BIGINT、DECIMAL、DOUBLEDATETIME类型,则会隐式转换为STRING类型后参与运算。

  • start_position:必填。BIGINT类型,不同 start_position 值行为说明如下

    start_position

    参数行为说明

    1

    默认从第一个字符开始

    0

    负数

    默认从最后一个字符开始,若start_position小于-length(指字符串str的长度length):

    • 返回空字符串。

    • 执行SET odps.sql.bigquery.compatible=true;开启BigQuery兼容模式时,从第一个字符开始。

  • length:可选。BIGINT类型,表示子串的长度值,不指定时默认到str最后一个字符。

    • length0时,返回空字符串;

    • length小于0时,返回空字符串。仅在以下flag开启时,会返回报错信息:

      • 执行SETPROJECT odps.sql.bigquery.compatible=true;开启BigQuery兼容模式时,会返回错误。

返回值说明

返回STRING类型。返回规则如下:

  • strSTRING、BIGINT、DECIMAL、DOUBLEDATETIME类型时,返回报错。

  • lengthBIGINT类型时,返回报错。

  • 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_position0时,与起始位置为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函数属于字符串函数,更多查找字符串、转换字符串格式的相关函数请参见字符串函数