
# substr/substring
返回字符串 str 从 start_position 开始、长度为 length 的子串。substr 与 substring 功能相同。
#### 命令格式
```
substr(string <str>, bigint <start_position>[, bigint <length>])
```
或
```
substring(string <str>, bigint <start_position>[, bigint <length>])
```
#### 参数说明
| 参数             | 是否必选 | 参数类型   | 说明                                 |
|:---|:---|:---|:---|
| str            | 是    | STRING | 待截取子串的字符串。                         |
| start_position | 是    | BIGINT | 起始位置，从 1 开始。取值为正时从左边开始，取值为负时从右边开始。 |
| length         | 否    | BIGINT | 子串的长度值，必须大于 0。省略时返回到 str 结尾的子串。    |
   
#### 返回值说明
返回 STRING 类型。
![](https://support.huaweicloud.com/sqlref-spark-aidatalake/public_sys-resources/note_3.0-zh-cn.png)
- 当 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);
```
