Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MYSQL:匹配并从字符串中删除匹配的单词_Mysql - Fatal编程技术网

MYSQL:匹配并从字符串中删除匹配的单词

MYSQL:匹配并从字符串中删除匹配的单词,mysql,Mysql,找到匹配项时,我必须从字符串中删除单词 让我看看 我的输入字符串是 “基诺克斯路” 具有匹配性能的单词表 街头 驱力 道路 4.车道 输出字符串应为: KENOX 我正在使用vb.net开发这个windows窗体应用程序。我正在从文本框中获取输入字符串,单击一个按钮,我必须检查来自数据库的匹配项并删除匹配的单词。 目前的解决办法是: Dim strStreetName As String = txtHStreet.Text For Each wordToRemove As DataR

找到匹配项时,我必须从字符串中删除单词

让我看看

我的输入字符串是

“基诺克斯路” 具有匹配性能的单词表

  • 街头
  • 驱力
  • 道路 4.车道
  • 输出字符串应为: KENOX

    我正在使用vb.net开发这个windows窗体应用程序。我正在从文本框中获取输入字符串,单击一个按钮,我必须检查来自数据库的匹配项并删除匹配的单词。 目前的解决办法是:

      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,并且希望它支持多个单词替换,我认为除非您使用编程语言,否则没有解决方案。

    到目前为止您尝试了什么?您使用的是什么编程/脚本语言?您是想将更改保存回数据库,还是只是向用户显示文本?如果你更新你的问题以包含这些信息,你更有可能得到答案。