返回字符串str从start_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
在MaxCompute1.0和2.0数据类型版本下,返回空字符串。
若执行
SET odps.sql.bigquery.compatible=true;
开启BigQuery兼容模式时,从第一个字符开始。在MaxComputeHive兼容数据类型版本下,默认从第一个字符开始
负数
默认从最后一个字符开始,若start_position小于-length(指字符串str的长度length):
返回空字符串。
执行
SET odps.sql.bigquery.compatible=true;
开启BigQuery兼容模式时,从第一个字符开始。
length:可选。BIGINT类型,表示子串的长度值,不指定时默认到str最后一个字符。
当length为0时,返回空字符串;
当length小于0时,返回空字符串。仅在以下flag开启时,会返回报错信息:
执行
SETPROJECT odps.sql.bigquery.compatible=true;
开启BigQuery兼容模式时,会返回错误。
返回值说明
返回STRING类型。返回规则如下:
str非STRING、BIGINT、DECIMAL、DOUBLE或DATETIME类型时,返回报错。
length非BIGINT类型时,返回报错。
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);
示例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函数属于字符串函数,更多查找字符串、转换字符串格式的相关函数请参见字符串函数。