MySQL函数INSTR的用法详解mysqlinstr

使用 INSTR 直接查找位置并返回索引号。

查找单个字符的位置,INSTR('abc', 'a')。

查找子字符串的位置,INSTR('abc', 'b')。

重复子字符串并仅返回第一个位置 INSTR('abab', 'ab')。

指定起始位置 INSTR('abc', 'b', 2 )。

WHERE 过滤子句,INSTR(name, 'Tom') > 0。

你自己掂量一下。

mysql中instr()函数的使用

嘿,你是问MySQL的INSTR函数吗?好吧,我给大家说一下我上次遇到的具体情况。

上周有客户问我,为什么用 INSTR 检查邮件后缀时,中文环境是区分大小写的。
看了一下才知道这个产品默认是检查排序规则的。
例如,如果你的数据库字段是utf8 _general_ci,则查询可能不区分大小写,这确实很烦人。
接下来,我建议他直接使用BINARY关键字来强制区分,比如INSTR(BINARY'email','@'),当时他是对的。

说实话,INSTR和LOCATE的用法是差不多的。
两者都找到子字符串的位置。
但是,INSTR 参数的顺序是主字符串加子字符串。
这一点不要混淆。
LOCATE支持更多的初始位置参数,比INSTR更灵活。
上次我编写查询时,我必须定位特定关键字并从某个位置开始搜索。
这时候 LOCATE 就派上用场了。

最令人兴奋的事情是什么? LIKE 可以做很多 INSTR 可以做的事情,但是 INSTR 返回的是位置索引,更加直接。
我已经有一个项目,我必须根据产品描述中是否存在“折扣”一词进行过滤。
只需使用 INSTR(description,'discount')>0 即可完成。
这比写 LIKE '%discount%' 效率高得多,而且不用担心前后有空格。

不过话虽如此,使用 INSTR 截取字符串需要与 SUBSTR 结合使用。
我的一个老同事写了一个函数,使用 INSTR 找到电子邮件地址的 @ 符号的位置,加 1 ,然后使用 SUBSTR 提取域名。
如果你经常使用这种组合,写 SQL 就会变得非常顺利。

如果你想使用 INSTR,我建议你尝试将它与 SUBSTR 和 LEFT/RIGHT 结合起来。
最近写了一份报告,需要将用户名和域名分开显示,所以我使用了INSTR+SUBSTR,这样比正则表达式简单多了。
然而,这取决于你自己想办法。
你练习得越多,你就会越习惯。

mysql中字符串的位置

抱歉,经过多次使用后,这个 MySQL LOCATE 函数非常方便。
顺便说一句,这个功能相当于搜索东西。
如果你给它你正在寻找的东西(子字符串)和位置(主字符串),它会告诉你“孩子”在哪里。
来吧,让我给你举个例子。
例如,如果您要查找的“abc”在“defabcghi”中,则使用LOCATE('abc', 'defabcghi'),它会告诉您“abc”是从左边算起的第五个位置。

但是,有时我们可能不会从第一个位置开始寻找,那么我们该怎么办呢? LOCATE 函数也考虑到了这一点,并且还支持从特定位置开始搜索。
例如,如果您使用 LOCATE('abc', 'defabcghi', 6 ),则表示您从第六个位置开始搜索“abc”,然后它会告诉您“abc”是从第六个位置开始的第八个位置。

此功能在处理文本数据时特别有用。
例如,如果您有一篇很大的文章,想要查找某个关键字首次出现的位置,此功能可以帮助您快速找到它。
当时我在一家公司做数据清洗,利用这个功能在数百万数据中找到某个关键词第一次出现的位置,方便我们后续的分析处理。

说实话,当时我不太明白这个函数为什么叫LOCATE。
后来我想了想,也许是因为他能找到绳子的位置。
然而,随着越来越多的人使用它,这个功能变得更简单、更容易理解。