[英]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.