如何使 mysql LIKE 只搜索单个单词
How to make mysql LIKE search for exactly single words only
我有这样的查询:
SELECT * FROM mytable where description like %STRING%
问题是:当我搜索 JAVA
时,它 returns 我什至 JAVAscript
.
的记录
但是,JAVA != JavaScript,对吧?我该如何解决?
MySQL 的 LIKE
运算符不太适合检测字符串中的单个单词。但是支持正则表达式的 REGEXP
可以解决这个问题。考虑以下查询:
SELECT * FROM mytable WHERE description REGEXP '[[:<:]]Java[[:>:]]';
这对应于匹配模式 \bJava\b
,即单词 Java
本身。
编辑:
如果您尝试使用 Laravel 执行此查询,那么 whereRaw
应该派上用场:
$results = DB::table('mytable')
->whereRaw('description REGEXP ?', ['[[:<:]]Java[[:>:]]'])
->get();
我有这样的查询:
SELECT * FROM mytable where description like %STRING%
问题是:当我搜索 JAVA
时,它 returns 我什至 JAVAscript
.
的记录
但是,JAVA != JavaScript,对吧?我该如何解决?
MySQL 的 LIKE
运算符不太适合检测字符串中的单个单词。但是支持正则表达式的 REGEXP
可以解决这个问题。考虑以下查询:
SELECT * FROM mytable WHERE description REGEXP '[[:<:]]Java[[:>:]]';
这对应于匹配模式 \bJava\b
,即单词 Java
本身。
编辑:
如果您尝试使用 Laravel 执行此查询,那么 whereRaw
应该派上用场:
$results = DB::table('mytable')
->whereRaw('description REGEXP ?', ['[[:<:]]Java[[:>:]]'])
->get();