
# locate
locate函数用于在str中查找substr的位置。您可以通过start_pos指定开始查找的位置，从1开始计数。
#### 命令格式
```
locate(string <substr>, string <str>[, bigint <start_pos>])
```
#### 参数说明
表1参数说明 
| 参数        | 是否必选 | 参数类型   | 说明                                                                                                                                             |
|:---|:---|:---|:---|
| str       | 是    | STRING | 待搜索的目标字符串。 如果输入为BIGINT、DOUBLE、DECIMAL或DATETIME类型，则会隐式转换为STRING类型后参与运算，其他类型会返回报错。 |
| substr    | 是    | STRING | 待匹配的子串。 如果输入为BIGINT、DOUBLE、DECIMAL或DATETIME类型，则会隐式转换为STRING类型后参与运算，其他类型会返回报错。  |
| start_pos | 否    | BIGINT | 指定查找的起始位置。                                                                                                                                     |
   
#### 返回值说明
返回为BIGINT类型。
![](https://support.huaweicloud.com/sqlref-spark-dli/public_sys-resources/note_3.0-zh-cn.png)
- str中无法匹配到substr时，返回0。
- str或substr值为NULL时，返回NULL。
- start_pos值为NULL时，返回0。
 
#### 示例代码
- 查找字符串ab在字符串abhiab中的位置。命令示例如下。 返回1。
  ```
  select locate('ab', 'abhiab');
  ```
  返回5。
  ```
  select locate('ab', 'abhiab', 2);
  ```
  返回0。
  ```
  select locate('ab', 'abhiab', null);
  ```
  
- 查找字符串hi在字符串hanmeimei and lilei中的位置。命令示例如下。 返回0。
  ```
  select locate('hi', 'hanmeimei and lilei');
  ```
  
 
