mysql字符串函数:locate()使用方法详解

语法 一:

LOCATE(substr,str)

返回字符串substr中第一次出现子字符串的位置 str。

 

语法 二:

LOCATE(substr,str,pos)

返回字符串substr中第一个出现子 字符串的 str位置,从位置开始 pos。0 如果substr不在,则 返回str。返回 NULL如果substr 或者str是NULL。

 

简单例子:

  1. mysql> SELECT LOCATE('bar', 'foobarbar');
  2.         -> 4
  3. mysql> SELECT LOCATE('xbar', 'foobar');
  4.         -> 0
  5. mysql> SELECT LOCATE('bar', 'foobarbar', 5);
  6.         -> 7

 

使用案例:

现在有一张user表,如下:

id user_name emails
1 小张 a@fujieace.com,b@fujieace.com,c@fujieace.com
2 小王 aa@fujieace.com,bb@fujieace.com,cc@fujieace.com
3 李四 aa@fujieace.com,b@fujieace.com,d@fujieace.com
4 王五 aa@fujieace.com,e@fujieace.com,f@fujieace.com

 

思考:

我们如何用sql查找所有“emails”字段中有“aa@fujieace.com”的用户?

 

答案:

  1. select * from users where locate('aa@email.com',emails);

 

拓展案例:

判断site表中的url是否包含'http://'子串,如果不包含则拼接在url字符串开头

  1. update site set url =concat('http://',url) where locate('http://',url)=0;

注意:mysql中字符串的拼接不能使用加号+,用concat函数;

 

mysql字符串函数:locate

付杰
  • ¥ 1999.9元
  • 市场价:20000元
  • ¥ 99.0元
  • 市场价:129.0元
  • ¥ 59.8元
  • 市场价:99.8元
  • ¥ 99.0元
  • 市场价:99.0元

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

目前评论:8   其中:访客  0   博主  0

  1. 头像 test 1

    完美解决我的需求场景:使用该函数(SUBSTRING_INDEX())进行制定符号切割,切割后的数值跟我们目标值进行相等比较,即可得出精准查找的结果;

    • 付杰 付杰

      @test 你都找到函数了,恭喜。

  2. 头像 test 1

    博主,经过多次验证,这个方法并不能精准查找;比如:a@fujieace.com;那么找出来的必定是很多有类似的数据:比如aa@fujieace.com,ba@fujieace.com,ca@fujieace.com等;那么,现在我这个业务场景需要博主能够指点迷津,如何根据第一个符号前的数据进行精准的全字匹配,而不会出现类似模糊查询的效果

  3. 头像 饭太稀 0

    博主现在是自由职业了吗?专职写博客吗

  4. 头像 过桥米线 1

    locate mysql哪个版本支持?

    • 付杰 付杰

      @过桥米线 这个我还真没有去了解过,但是我用的mysql版本这函数一直都可以用。应该mysql版本都兼容locate函数吧!毕竟它只是一个函数,除非弃用了!

  5. 头像 将心比心 0

    很好,又学习了一个mysql函数。