【问题标题】:MYSQL : match and remove matched word from stringMYSQL:匹配并从字符串中删除匹配的单词
【发布时间】:2015-09-10 21:32:56
【问题描述】:

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

让我们看看

我的输入字符串是

'肯诺克斯路'

匹配执行的单词表

  1. 街道
  2. 开车
  3. 道路

    4. 驱动方式

输出字符串应该是:

肯诺克斯

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

  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

但是,我正在寻找数据库端解决方案。

【问题讨论】:

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

标签: mysql


【解决方案1】:

认为以下方法可行:

set @phrase = 'KENOX ROAD';

set @phrase = concat(' ', phrase, ' ')

select @phrase := replace(@phrase, concat(' ', w.word, ' '), ' '))
from words w;

set @phrase = trim(@phrase);

您的问题有点棘手,因为您似乎希望识别单词并且(不幸的是)MySQL 没有正则表达式替换功能。上面在开头和结尾添加了分隔符,然后进行替换。像这样使用变量不是最喜欢的方法,但我认为在这种情况下它会起作用。

【讨论】:

    【解决方案2】:

    MariaDB 从 10.0.5 开始,带有 REGEX - PCRE 正则表达式

    Mariadb REGEX Manual

    【讨论】:

      【解决方案3】:

      MySQL 本身不支持正则表达式替换。如果您想更新现有表,可以尝试使用以下方法:

      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, ' '), ' ')
        );
      

      如果您想匹配和替换多个单词,您必须重新运行此更新查询,直到找不到更多匹配项。请看小提琴here。不太干净,但应该可以发挥作用。

      如果你只想要一个 SELECT,并且希望它支持多个单词替换,我认为除非你使用编程语言,否则没有解决方案。

      【讨论】:

        猜你喜欢
        • 2013-02-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-12-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多