簡體   English   中英

在MySQL中如何編寫SQL在字段中搜索單詞?

[英]In MySQL how to write SQL to search for words in a field?

create table tbl (
  id int,
  comment varchar(255),
  primary key (id)
);

insert into tbl (id, comment) values ('1', 'dumb,');
insert into tbl (id, comment) values ('2', 'duuumb,');
insert into tbl (id, comment) values ('3', 'dummb');
insert into tbl (id, comment) values ('4', 'duummb');
insert into tbl (id, comment) values ('5', 'very dumb person');

select comment, soundex(comment) 
from tbl;

結果:

+------------------+------------------+
| comment          | soundex(comment) |
+------------------+------------------+
| dumb,            | D510             |
| duuumb,          | D510             |
| dummb            | D510             |
| duummb           | D510             |
| very dumb person | V6351625         |
+------------------+------------------+

我想在字段中的任何地方找到所有包含“啞”的行,包括所有錯字和變化。

select comment 
from tbl
where soundex(comment) like '%D510%'

這無法獲得最后的第5行,我又如何獲得該行? 如果有比soundex()更好的解決方案,那就沒問題了。

這將適用於您的特定示例:

select comment 
from tbl
where soundex(comment) like '%D510%' or comment like '%dumb%';

它不會在評論中發現拼寫錯誤。

編輯:

您可以執行以下操作:

select comment
from tbl
where soundex(comment) = soundex('dumb') or
      soundex(substring_index(substring_index(comment, ' ', 2), -1)  = soundex('dumb') or
      soundex(substring_index(substring_index(comment, ' ', 3), -1)  = soundex('dumb') or
      soundex(substring_index(substring_index(comment, ' ', 4), -1)  = soundex('dumb') or
      soundex(substring_index(substring_index(comment, ' ', 5), -1)  = soundex('dumb');

有點蠻力。

需要這樣做建議您應該考慮全文索引。

您可以嘗試使用MySQL REGEXP嗎? 是在文本中查找特定單詞的好方法。

您可以使用[[:<:]][[:>:]]作為單詞邊界:

SELECT comment FROM tbl WHERE comment REGEXP '[[:<:]]dumb[[:>:]]'

假設您需要整個字段,而不僅僅是匹配的元素,那么這應該起作用,因為soundex永遠不會在另一個元素的中間找到一個元素。

選擇來自tbl的評論,其中(soundex(comment)如'%D510%'或'%d%mb'之類的評論)

編輯已更改,例如對於U是其他東西的情況,即Damb,其聲音為D510

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM