MySQL中的LOCATE和INSTR函数详解

在MySQL中,LOCATE和INSTR是用于字符串查找的两个常用函数,它们都返回一个子字符串在另一个字符串中第一次出现的位置。本文将详细介绍这两个函数的用法及区别。
1. LOCATE函数
LOCATE函数的语法如下:
LOCATE(substring, string, start)
其中,substring为要查找的子字符串,string为要被查找的字符串,start为查找的起始位置(可选,默认为1)。
1.1 示例
假设有如下表users:
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50)
);
INSERT INTO users (name) VALUES ('Alice'), ('Bob'), ('Cindy'), ('David');
现在我们想查找名字中包含i的用户的位置:
SELECT id, name, LOCATE('i', name) AS position
FROM users
WHERE LOCATE('i', name) > 0;
运行上述查询,则会得到如下结果:
| id | name | position |
| --- | ----- | -------- |
| 1 | Alice | 3 |
| 3 | Cindy | 4 |
| 4 | David | 2 |
从结果可以看出,LOCATE函数返回了包含i字符的位置,可以根据这个位置进行后续的操作。
1.2 注意事项
- 如果
substring为空字符串,则LOCATE函数会返回1。 - 如果
substring未在string中找到,则返回0。 - 如果
start小于1,则从第一个字符开始查找。
2. INSTR函数
INSTR函数的语法如下:
INSTR(string, substring)
其中,string为要被查找的字符串,substring为要查找的子字符串。
2.1 示例
使用INSTR函数同样可以实现上述的功能:
SELECT id, name, INSTR(name, 'i') AS position
FROM users
WHERE INSTR(name, 'i') > 0;
查询结果与使用LOCATE函数时相同。
2.2 区别
LOCATE函数中的start参数允许指定起始位置,而INSTR函数没有这个参数。- 当
substring未在string中找到时,LOCATE函数返回0,INSTR函数返回NULL。
3. 总结
LOCATE和INSTR函数都可以用于在字符串中查找子字符串的位置。LOCATE函数支持指定起始位置,而INSTR函数不支持。- 当子字符串未找到时,
LOCATE函数返回0,INSTR函数返回NULL。
极客笔记