MySQL INSTR函数简介

MySQL INSTR函数简介MySQLINSTR 函数简介有时 您想要在字符串中查找子字符串或检查字符串中是否存在子字符串 在这种情况下 您可以使用字符串内置 INSTR 函数 INSTR 函数返回字符串中子字符串第一次出现的位置 如果在 str 中找不到子字符串 则 INSTR 函数返回零 0 下面说明了 INSTR 函数的语法 INSTR str substr SQLINSTR 函数接受两个参数

MySQL INSTR函数简介

有时,您想要在字符串中查找子字符串或检查字符串中是否存在子字符串。在这种情况下,您可以使用字符串内置INSTR()函数。

INSTR()函数返回字符串中子字符串第一次出现的位置。如果在str中找不到子字符串,则INSTR()函数返回零(0)。

下面说明了INSTR函数的语法。

INSTR(str,substr); 

SQL

INSTR函数接受两个参数:

  • str是要搜索的字符串。
  • substr是要搜索的子字符串。

INSTR()函数不区分大小写。这意味着如果通过小写,大写,标题大小写等,结果总是一样的。

如果希望INSTR函数在非二进制字符串上以区分大小写的方式执行搜索,则可以使用BINARY运算符将INSTR函数的参数从非二进制字符串转换为二进制字符串。

MySQL INSTR函数示例

以下语句返回MySQL INSTR字符串中的子字符串SQL的位置。

SELECT INSTR('MySQL INSTR', 'SQL'); 

SQL

执行上面查询语句,得到以下结果 –

  
  1. mysql> SELECT INSTR('MySQL INSTR', 'SQL');
  2. +-----------------------------+
  3. | INSTR('MySQL INSTR', 'SQL') |
  4. +-----------------------------+
  5. | 3 |
  6. +-----------------------------+
  7. 1 row in set

SQL

以下语句返回相同的结果,因为INSTR函数不区分大小写。

SELECT INSTR('MySQL INSTR', 'sql'); 

SQL

执行上面查询语句,得到以下结果 –

  
  1. mysql> SELECT INSTR('MySQL INSTR', 'sql');
  2. +-----------------------------+
  3. | INSTR('MySQL INSTR', 'sql') |
  4. +-----------------------------+
  5. | 3 |
  6. +-----------------------------+
  7. 1 row in set

SQL

要强制INSTR函数根据以区分大小写的方式进行搜索,请按如下所示使用BINARY运算符:

SELECT INSTR('MySQL INSTR', BINARY 'sql'); 

SQL

执行上面查询语句,得到以下结果 –

  
  1. mysql> SELECT INSTR('MySQL INSTR', BINARY 'sql');
  2. +------------------------------------+
  3. | INSTR('MySQL INSTR', BINARY 'sql') |
  4. +------------------------------------+
  5. | 0 |
  6. +------------------------------------+
  7. 1 row in set

SQL

结果是不同的,因为现在使用BINARY运算符,因为sqlSQL是不同的字符串。

INSTR函数与LIKE运算符

我们将使用示例数据库(yiibaidb)中的products表,其表结构如下 –

  
  1. mysql> desc products;
  2. +--------------------+---------------+------+-----+---------+------------------+
  3. | Field | Type | Null | Key | Default | Extra |
  4. +--------------------+---------------+------+-----+---------+------------------+
  5. | productCode | varchar(15) | NO | PRI | | |
  6. | productName | varchar(70) | NO | MUL | NULL | |
  7. | productLine | varchar(50) | NO | MUL | NULL | |
  8. | productScale | varchar(10) | NO | | NULL | |
  9. | productVendor | varchar(50) | NO | | NULL | |
  10. | productDescription | text | NO | | NULL | |
  11. | quantityInStock | smallint(6) | NO | | NULL | |
  12. | buyPrice | decimal(10,2) | NO | | NULL | |
  13. | MSRP | decimal(10,2) | NO | | NULL | |
  14. | stockValue | double | YES | | NULL | STORED GENERATED |
  15. +--------------------+---------------+------+-----+---------+------------------+
  16. 10 rows in set

SQL

假设要查找名称包含car关键字的产品,可以使用INSTR函数,如下所示:

  
  1. SELECT
  2. productName
  3. FROM
  4. products
  5. WHERE
  6. INSTR(productname,'Car') > 0;

SQL

执行上面查询语句,得到以下结果 –

  
  1. +----------------------------------------+
  2. | productName |
  3. +----------------------------------------+
  4. | 1911 Ford Town Car |
  5. | 1999 Indy 500 Monte Carlo SS |
  6. | 18th Century Vintage Horse Carriage |
  7. | 1917 Maxwell Touring Car |
  8. | 1950s Chicago Surface Lines Streetcar |
  9. | 1962 City of Detroit Streetcar |
  10. +----------------------------------------+
  11. 6 rows in set

SQL

除了INSTR函数,可以使用LIKE运算符来匹配Car模式。

  
  1. SELECT
  2. productname
  3. FROM
  4. products
  5. WHERE
  6. productname LIKE '%Car%';

SQL

执行上面查询语句,得到以下结果 –

  
  1. +----------------------------------------+
  2. | productname |
  3. +----------------------------------------+
  4. | 1911 Ford Town Car |
  5. | 1999 Indy 500 Monte Carlo SS |
  6. | 18th Century Vintage Horse Carriage |
  7. | 1917 Maxwell Touring Car |
  8. | 1950s Chicago Surface Lines Streetcar |
  9. | 1962 City of Detroit Streetcar |
  10. +----------------------------------------+
  11. 6 rows in set

SQL

两个查询返回相同的结果。那么哪一个更快,INSTR还是LIKE操作符?

答案是它们是一样的,它们都区分大小写,并执行全表扫描。

让我们在productname列创建一个索引。

CREATE INDEX idx_products_name ON products(productname); 

SQL

如果您使用具有前缀搜索的LIKE运算符,则在此索引列上,LIKE运算符的执行速度要比INSTR函数快。

请参阅以下查询语句 –

  
  1. SELECT
  2. productname
  3. FROM
  4. products
  5. WHERE
  6. productname LIKE '1900%';

SQL

执行上面查询语句,得到以下结果 –

  
  1. +-------------------------+
  2. | productname |
  3. +-------------------------+
  4. | 1900s Vintage Bi-Plane |
  5. | 1900s Vintage Tri-Plane |
  6. +-------------------------+
  7. 2 rows in set

SQL

您可以使用EXPLAIN语句检查它:

  
  1. EXPLAIN SELECT
  2. productname
  3. FROM
  4. products
  5. WHERE
  6. productname LIKE '1900%';

SQL

执行查询分析,得到以下结果 –

 

MySQL INSTR函数简介

下面使用INSTR函数执行查询分析,以进行比较,参考以下语句 –

  
  1. EXPLAIN SELECT
  2. productname
  3. FROM
  4. products
  5. WHERE
  6. instr(productname,'1900');

SQL

执行查询分析,得到以下结果 –

 

MySQL INSTR函数简介

即使productname列具有索引,INSTR函数也执行表扫描。 这是因为MySQL不能对INSTR函数的语义做任何假设,MySQL可以利用其对LIKE运算符语义的理解。

测试字符串中是否存在子字符串的最快方法是使用全文索引。 但是,需要正确配置和维护索引。

在本教程中,您已经学习了如何使用INSTR函数来查找字符串中子字符串第一次出现的位置。

转载:https://blog.csdn.net/moakun/article/details/

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/213868.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月18日 下午5:28
下一篇 2026年3月18日 下午5:28


相关推荐

  • pycharm运行出现utf8中文格式问题

    pycharm运行出现utf8中文格式问题改完了数据迁移问题之后终于又要来到了这个界面运行问题了 没想到运行 pythonmanage pyrunserver 之后不是出现之前的这个问题 ps 出现的这个目标卷轴不正确的问题 最终解决的方法是重新用 cmd 建了项目 把 manage py 文件移动到了根目录下最终也能成功运行了 而是出现了 utf 8 的编码问题参考了博主的文章 https blog csdn net Beyond F4 article details 每一个都试了之后还是不行然后就自己

    2026年3月27日
    2
  • AES加密解密(ECB模式)

    AES加密解密(ECB模式)高级加密标准 英语 AdvancedEncr 缩写 AES 在密码学中又称 Rijndael 加密法 是美国联邦政府采用的一种区块加密标准 这个标准用来替代原先的 DES 已经被多方分析且广为全世界所使用 经过五年的甄选流程 高级加密标准由美国国家标准与技术研究院 NIST 于 2001 年 11 月 26 日发布于 FIPSPUB197 并在 2002 年 5 月 26 日成为有

    2026年3月19日
    2
  • python脚本编写

    python脚本编写什么是脚本 Python 是一种 脚本语言 脚本 对应的英文是 script 一般人看到 script 这个英文单词 或许想到的更多的是 电影的剧本 就是一段段的脚本 所组成的 电影剧本的脚本 决定了电影中的人和物 都做哪些事情 怎么做 而计算机中的脚本 决定了 计算机中的操作系统和各种软件工具 要做哪些事情 以及具体怎么做 脚本 vs 程序你可能想要了解脚本与一般程序的区别

    2026年3月20日
    3
  • h5实现长按复制文本_ios13如何复制链接

    h5实现长按复制文本_ios13如何复制链接前段时间有位朋友让帮忙做一个手机h5页面长按复制的功能,先上图安卓实现起来没问题,有时候ios会报错,无奈手边也没有iPhone手机,折腾了好几次才完成,直接上关键代码<scriptsrc=”js/jquery.ui.draggable.js”type=”text/javascript”></script><scripttype=”text/…

    2026年4月17日
    7
  • MapReduce编程模型详解

    MapReduce编程模型详解1.1MapReduce是什么  HadoopMapReduce是一个软件框架,基于该框架能够容易地编写应用程序,这些应用程序能够运行在由上千个商用机器组成的大集群上,并以一种可靠的,具有容错能力的方式并行地处理上TB级别的海量数据集。这个定义里面有着这些关键词,一是软件框架,二是并行处理,三是可靠且容错,四是大规模集群,五是海量数据集。1.2MapReduce做什么…

    2022年6月18日
    31
  • nginx Access日志格式「建议收藏」

    nginx Access日志格式「建议收藏」默认,access日志路径是./logs/access.log,默认的日志格式为combined格式;使用log_format指令可以自定义日志格式;语法log_formatname[escape=default|json|none]string…;escape参数(1.11.8)设置变量的字符转义,json或default风格;默认使用default风格;none关闭转义…

    2022年6月10日
    31

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号