如何在MySQL中查询包含给定文本的字段?

TIM*_*MEX 40 mysql sql database

SELECT stuff REGEXP 'itunes' as is_itunes;
Run Code Online (Sandbox Code Playgroud)

在这个MySQL查询中,如果"stuff"中包含单词"itunes",它会将其标记为itunes.

但是,我想说"开头".如何检查"开头"而不是文本中的任何位置?

Mar*_*c B 83

SELECT ... WHERE stuff LIKE 'itunes%';
Run Code Online (Sandbox Code Playgroud)

这里%作为通配符,所以这将匹配的行stuff字段等于任意的itunes,itunesfoo,itunes1,...

更多信息:SQL LIKE操作员W3Schools的.

  • 如果不是`itunes`使用占位符怎么办?这是正确的`SELECT ... WHERE stuff LIKE?'%';` (4认同)
  • @Skynet,%是一个匹配任意数量字符(包括零个字符)的通配符.因此该示例将匹配itunesstore,itunesUsername和itunes.MySQL文档在这里,很难搜索谷歌%!https://dev.mysql.com/doc/refman/5.7/en/pattern-matching.html (3认同)
  • %符号传达了什么? (2认同)

Kai*_*aja 7

添加插入符号,它表示字符串的开头:

SELECT stuff REGEXP '^itunes' as is_itunes;
Run Code Online (Sandbox Code Playgroud)

但是,LIKE 'itunes%'正如Marc所建议的那样,应该快得多,特别是如果索引设置正确的话.


Mee*_*lah 6

SELECT ... WHERE LEFT(stuff, 6) = 'itunes';
Run Code Online (Sandbox Code Playgroud)


O_Z*_*O_Z 5

对于索引字段,最好这样做:

select ... where stuff >='itunes' AND stuff < 'itunet'

这不会创建完整的表扫描,并使用索引.