SQL Like查询包含关键字

时间:2016-05-15 04:21:30

标签: mysql

例如: 我有1个字用于搜索数据。这个词就是'ayam'。

这是我的疑问:

select nama_product from product where nama_product like %a%

工作正常。但它显示了我不想展示的记录。 这是结果:

  • ayam bakar
  • daging ayam
  • bayam hijau
  • daun bayam

第一个和第二个结果没问题。但是第三次​​也是最后一次我不想表现出来。

因为我想要'ayam'而不是'b'ayam'“

我该如何处理?我不知道它是否重复。因为我已经搜索过了,但我没找到。

4 个答案:

答案 0 :(得分:1)

不幸的是,这是SQL的限制。某些SQL数据库具有高级文本搜索功能,例如允许非常特定的文本结果的正则表达式。

对于您的情况,您可能需要执行多个LIKE条件。例如:

select nama_product 
from product 
where 
    nama_product like 'ayam %'
    or nama_product like '% ayam %'
    or nama_product like '% ayam'
    or nama_product = 'ayam'

请注意,如果文本字段非常大或表格很大,依赖LIKE运算符的查询可能会变得非常慢。 LIKE不适合大型数据集。如果这是您认为将来会变得非常大的数据集,最好以不需要LIKE运算符的方式进行设计。

答案 1 :(得分:1)

如果你需要搜索单词'ayam'而没有任何前缀和后缀字符,你最好使用正则表达式。
例如,

SELECT namma_product FROM product WHERE namma_product REGEXP 'ayam'

试试这个。这将有效

答案 2 :(得分:0)

您可以使用regex仅匹配整个字词:

Gravity.TOP
  • select nama_product from product where nama_product regexp '(^| )ayam( |$)'; 表示该字必须是字符串的开头,或者必须以空格开头
  • (^| )是我们匹配的词
  • ayam表示该字必须后跟空格,或者必须是字符串的结尾

SQL Fiddle

答案 3 :(得分:-1)

当你在其前后插入'%'表示关键字之前(之后)的所有字符时,只需改变你想要的方式 例如,只有关键字以“ayam”开头: 从产品中选择nama_product,其中nama_product如'ayam%'

另一个例子只是以“ayam”结尾的关键字: 从产品中选择nama_product,其中nama_product如'%ayam'

然后看看这里ithink你的答案就在这里:

Match only entire words with LIKE?