
# substr/substring
substr、substring函数用于返回字符串str从start_position开始，长度为length的子串。
#### 命令格式
```
substr(string <str>, bigint <start_position>[, bigint <length>])
```
或
```
substring(string <str>, bigint <start_position>[, bigint <length>])
```
#### 参数说明
表1参数说明 
| 参数             | 是否必选 | 参数类型   | 说明                                                                                                                                                  |
|:---|:---|:---|:---|
| str            | 是    | STRING | 如果输入为BIGINT、DECIMAL、DOUBLE或DATETIME类型，则会隐式转换为STRING类型后参与运算。                                                                                         |
| start_position | 是    | BIGINT | 表示起始位置。默认起始位置为1。 如果start_position取值为正，则从左边开始。如果start_position取值为负，则从右边开始。 |
| length         | 否    | BIGINT | 表示子串的长度值。值必须大于0。                                                                                                                                    |
   
#### 返回值说明
返回STRING类型的值。
![](https://support.huaweicloud.com/sqlref-spark-dli/public_sys-resources/note_3.0-zh-cn.png)
- str非STRING、BIGINT、DECIMAL、DOUBLE或DATETIME类型时，返回报错。
- length非BIGINT类型或值小于等于0时，返回报错。
- 当length被省略时，返回到str结尾的子串。
- str、start_position或length值为NULL时，返回NULL。
 
#### 示例代码
返回 k SQL。
```
SELECT substr('Spark SQL', 5);
```
返回 SQL。
```
SELECT substr('Spark SQL', -3);
```
返回 k。
```
SELECT substr('Spark SQL', 5, 1);
```
