MYSQL:匹配并从字符串中删除匹配的单词
找到匹配项时,我必须从字符串中删除单词 让我看看 我的输入字符串是 “基诺克斯路” 具有匹配性能的单词表MYSQL:匹配并从字符串中删除匹配的单词,mysql,Mysql,找到匹配项时,我必须从字符串中删除单词 让我看看 我的输入字符串是 “基诺克斯路” 具有匹配性能的单词表 街头 驱力 道路 4.车道 输出字符串应为: KENOX 我正在使用vb.net开发这个windows窗体应用程序。我正在从文本框中获取输入字符串,单击一个按钮,我必须检查来自数据库的匹配项并删除匹配的单词。 目前的解决办法是: Dim strStreetName As String = txtHStreet.Text For Each wordToRemove As DataR
Dim strStreetName As String = txtHStreet.Text
For Each wordToRemove As DataRow In dsAbbreviation.Tables(0).Rows
If strStreetName.Contains(wordToRemove.Item("NAME")) Then
strStreetName = strStreetName.Replace(wordToRemove.Item("NAME"), "")
Exit For
End If
Next
但是,我正在寻找数据库端解决方案。我认为以下方法可以奏效:
set @phrase = 'KENOX ROAD';
set @phrase = concat(' ', phrase, ' ')
select @phrase := replace(@phrase, concat(' ', w.word, ' '), ' '))
from words w;
set @phrase = trim(@phrase);
您的问题有点棘手,因为您似乎希望识别单词,而且(不幸的是)MySQL没有正则表达式替换功能。上面在开头和结尾添加分隔符,然后进行替换。使用这样的变量不是一种受欢迎的方法,但我认为它在这种情况下会起作用。MariaDB从10.0.5开始,使用REGEX-PCRE正则表达式
MySQL本机不支持regexp-replace。如果要更新现有表,可以尝试以下方法:
UPDATE
streets s INNER JOIN words w
ON INSTR(CONCAT(' ', s.name, ' '), CONCAT(' ', w.word, ' '))>0
SET
s.name = TRIM(
REPLACE(CONCAT(' ', s.name, ' '), CONCAT(' ', w.word, ' '), ' ')
);
如果您想匹配并替换多个单词,则必须重新运行此更新查询,直到它找不到任何匹配项为止。请看小提琴。不太干净,但它应该做它的工作
如果您只需要一个SELECT,并且希望它支持多个单词替换,我认为除非您使用编程语言,否则没有解决方案。到目前为止您尝试了什么?您使用的是什么编程/脚本语言?您是想将更改保存回数据库,还是只是向用户显示文本?如果你更新你的问题以包含这些信息,你更有可能得到答案。