【问题标题】:Using MySQL & Regex to extract colours from descriptions使用 MySQL 和 Regex 从描述中提取颜色
【发布时间】:2018-10-04 13:54:40
【问题描述】:

请看下面的 MySQL fiddle:

http://sqlfiddle.com/#!9/e84a6a/3/0

我已经包含了两个示例表,第一个是颜色列表,第二个是描述列表。

我想将颜色提取到一个新的单独列中,其中颜色存在于 tbl_colours 和 tbl_example 的描述中。

我怀疑我需要实现正则表达式和单词边界(即仅在它们与“整个单词”匹配时提取颜色,即被空格、字符串的结尾/开头、括号等包围。

我无法理解的是如何将连接和正则表达式与单词边界结合起来。

这在 MySQL 中可行吗?

【问题讨论】:

    标签: mysql regex


    【解决方案1】:

    一旦你解释了 MySQL 中 \b 的奇怪符号,这实际上很容易:

    SELECT 
        d.Code, d.Description, c.colour
    FROM
        tbl_example d
            LEFT JOIN
        tbl_colours c ON UPPER(d.Description) REGEXP CONCAT('[[:<:]]', colour, '[[:>:]]')
    

    【讨论】:

      【解决方案2】:

      这样就可以了:

      SELECT d.Code, d.Description, c.colour
      FROM tbl_example d
      JOIN (SELECT DISTINCT colour FROM tbl_colours) c ON d.Description REGEXP CONCAT('[[:<:]]',colour, '[[:>:]]');
      

      【讨论】:

      • 嗨,Shay,非常感谢您的回答,不幸的是,这种方法存在一些问题。即,如果描述包含作为另一个词的一部分的颜色,即“red”可以在“wired”中找到,你会得到误报。这就是为什么我认为需要正则表达式 /b(单词边界),但我无法理解它。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多