
# regexp_substr
regexp_substr函数用于计算从start_position位置开始，source中第occurrence次匹配指定pattern的子串。
#### 命令格式
```
regexp_substr(string <source>, string <pattern>[, bigint <start_position>[, bigint <occurrence>]])
```
#### 参数说明
表1参数说明 
| 参数             | 是否必选 | 参数类型   | 说明                                       |
|:---|:---|:---|:---|
| source         | 是    | STRING | 待搜索的字符串。                                 |
| pattern        | 是    | STRING | STRING类型常量或正则表达式。待匹配的模型。                 |
| start_position | 否    | BIGINT | 起始位置，必须大于0。不指定时默认为1，表示从source的第一个字符开始匹配。 |
| occurrence     | 否    | BIGINT | BIGINT常量，必须大于0。不指定时默认为1，表示返回第一次匹配的子串。    |
   
#### 返回值说明
返回STRING类型的值。
![](https://support.huaweicloud.com/sqlref-spark-dli/public_sys-resources/note_3.0-zh-cn.png)
- 如果pattern为空串，返回报错。
- 没有匹配时，返回NULL。
- start_position或occurrence非BIGINT类型或小于等于0时，返回报错。
- source、pattern、start_position、occurrence或return_option值为NULL时，返回NULL。
 
#### 示例代码
返回a。
```
select regexp_substr('a1b2c3', '[a-z]');
```
返回b。
```
select regexp_substr('a1b2c3', '[a-z]', 2, 1);
```
返回c。
```
select regexp_substr('a1b2c3', '[a-z]', 2, 2);
```
返回NULL。
```
select regexp_substr('a1b2c3', null);
```
