INSTR()函数用于查找子串在主串中的起始位置,返回值从1开始,未找到返回0。例如INSTR('hello world', 'world')返回7;若查找不存在的字符串如'mysql'则返回0;可用于字段筛选,如SELECT email, INSTR(email, 'gmail') AS pos FROM users WHERE INSTR(email, 'gmail') > 0,找出含'gmail'的邮箱并显示位置;该函数默认区分大小写,但受排序规则影响;与LOCATE()功能相似,INSTR(str, substr)等价于LOCATE(substr, str),而LOCATE支持第三个参数指定起始搜索位置;常用于判断字段是否包含关键词、实现类似LIKE的模糊匹配,或结合SUBSTR提取子串,如SUBSTR(email, INSTR(email, '@') + 1)提取域名。

在MySQL中,INSTR() 函数用于查找一个字符串在另一个字符串中首次出现的位置。如果找到,返回其起始位置(从1开始);如果未找到,返回0。这个函数非常适用于模糊匹配或判断某个子串是否存在于主串中。
INSTR(str, substr)
返回值为整数,表示子串在主串中的起始位置,索引从1开始。
下面是一些常见的使用场景和SQL示例:
1. 基本查找
SELECT INSTR('hello world', 'world');结果:7,因为 "world" 从第7个字符开始。
2. 查找不存在的字符串
SELECT INSTR('hello world', 'mysql');结果:0,表示未找到。
3. 在字段中使用
假设有一个用户表 users,其中有一个字段 email,你想找出邮箱中包含 "gmail" 的记录,并查看位置:
SELECT email, INSTR(email, 'gmail') AS pos FROM users WHERE INSTR(email, 'gmail') > 0;这将返回所有邮箱包含 "gmail" 的记录,并显示其起始位置。
4. 不区分大小写?注意!
INSTR() 是区分大小写的,但如果你使用的是不区分大小写的排序规则(如 utf8_general_ci),则表现可能像不区分大小写。若要强制区分,可使用二进制比较:
SELECT INSTR('Hello World', 'hello');在默认情况下可能返回0或1,取决于列的排序规则。
INSTR() 和 LOCATE() 非常相似。实际上,INSTR(str, substr) 等价于 LOCATE(substr, str)。LOCATE() 还支持第三个参数:起始搜索位置。
SELECT LOCATE('o', 'hello world', 5);从第5个字符之后查找 'o',结果是8。
例如:提取 @ 符号后的内容作为域名
SELECT email, SUBSTR(email, INSTR(email, '@') + 1) AS domain FROM users;基本上就这些。INSTR() 虽小但很实用,尤其在条件筛选和字符串处理时非常方便。掌握它能让你的SQL更高效。
以上就是mysql中instr()函数的使用的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号