繁体   English   中英

sql使用LIKE vslocate()搜索子字符串

[英]sql search for substring using LIKE vs locate()

我正在尝试编写查询以查找包含子字符串的字符串。 以下两种方法有什么区别?

  1. SELECT * FROM table WHERE names LIKE '%bob%'
  2. SELECT * FROM table WHERE locate('bob', names)

我最初学会了使用LIKE,但是出现“非法混合排序规则..”错误,我在比较英语(拉丁语)和​​中文(big5)。 当使用谷歌搜索方法来解决排序规则问题时,我遇到了locate(),当我尝试它时并没有抱怨排序规则。 只是想知道我是否可以继续使用locate()或它是否有任何缺点。

在很大程度上,这是一个品味问题。

最重要的考虑是like的ANSI标准的SQL和大部分(如果不是全部)的数据库支持。 locate是特定于MySQL的,因此它不一定可移植到其他数据库。

一些数据库会x like 'y%'优化表达式x like 'y%'以使用索引。 MySQL没有,因此您无需考虑。

like另一个优点是它支持初始匹配( 'y%' )和最终匹配( '%y' )以及中间匹配。 这三种方法之一。 使用locate的等效语句更加复杂。

我的首选是使用like ,尤其是由于可移植性。 但是,我通常不会面对不同的字符集。 学习 MySQL中的排序规则可能比尝试找到解决方法更好。

他们根本没有做同样的事情。 LIKE是一个进行文本匹配的运算符,而LOCATE是一个返回第一个匹配项位置的函数。

http://www.w3resource.com/mysql/string-functions/mysql-locate-function.php http://www.w3resource.com/mysql/string-functions/mysql-like-function.php

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM