MySQL模式匹配-查找匹配项

MySQL模式匹配-查找匹配项,mysql,database,pattern-matching,data-analysis,Mysql,Database,Pattern Matching,Data Analysis,我使用的是一个MySQL数据库,其中包含大量数据(约10.000条记录)。数据库中的数据是机器维护的日志记录,其中一个字段包含一个基本的时间线(只是带有时间戳的步骤),解释所有已完成的工作。在这个字段中,我寻找可以指示某些过程的特定字符串(即ABC123.ABC、abc111.ABC、abc001.ABC) 我在这一领域寻找类似于这样的模式匹配 SELECT * FROM [tablename] WHERE `work_performed` LIKE '% ______.___ %' ORDER

我使用的是一个MySQL数据库,其中包含大量数据(约10.000条记录)。数据库中的数据是机器维护的日志记录,其中一个字段包含一个基本的时间线(只是带有时间戳的步骤),解释所有已完成的工作。在这个字段中,我寻找可以指示某些过程的特定字符串(即ABC123.ABC、abc111.ABC、abc001.ABC)

我在这一领域寻找类似于这样的模式匹配

SELECT * FROM [tablename]
WHERE `work_performed` LIKE '% ______.___ %'
ORDER BY id DESC;`
正则表达式非常通用,但我可以自己进一步说明

但是,由于包含我要查找的字符串的字段可能非常大(最多2364763个字符),我希望返回与指定模式匹配的记录,但我还希望返回一个仅包含匹配表达式的字段,以便我可以确认它实际上是我要查找的,并可以进一步使用该字符串

我发现有同样问题的人,但我无法复制他们的结果。 像这样的东西可能有用吗

SELECT *, SUBSTRING(`work_performed`, 
patindex('%[0-9][0-9][0-9]%', `work_performed`)-1, 5) as match
FROM [tablename]
WHERE `work_performed`LIKE '% ______.___ %'
我希望得到如下输出:

+----+-------------------------------------------+------------+
| id |              work_performed               |   match    |
+----+-------------------------------------------+------------+
|  1 | 2017-02-26|10:59| Arrival: admin1         | ABCD12.adb |
|    | 2017-02-26|10:59| diagnosed error ab-0001 |            |
|    | 2017-02-26|11:02| ran ABCD12.adb          |            |
|    | 2017-02-26|11:03| system back online      |            |
+----+-------------------------------------------+------------+
|  2 | 2017-02-26|10:59| Arrival: admin34        | abc123.ags |
|    | 2017-02-26|10:59| diagnosed error WP1234  |            |
|    | 2017-02-26|11:02| ran abc123.ags          |            |
|    | 2017-02-26|11:03| system back online      |            |
+----+-------------------------------------------+------------+
如果我没有提供足够的细节,我很抱歉,但我是一家大公司的实习生,我们有非常严格的保密规定

如果需要任何额外的信息,我会尽力提供

编辑

我一直在尝试使用regexp搜索我要查找的字符串,但我无法使其按我所希望的方式工作,以下是我尝试的内容:

SELECT * FROM tablename
WHERE `work_performed` regexp '% ([a-z]^3)([0-9]^3).([a-z]^3) %'
ORDER BY id DESC;

使用
CONCAT
SUBSTR
SUBSTRING\u INDEX
LOCATE
功能的解决方案:

SELECT 
    CONCAT(SUBSTRING_INDEX(SUBSTRING_INDEX(work_performed, '.', 1), ' ', - 1),
        '.',
        SUBSTR(SUBSTRING_INDEX(work_performed, '.', - 1), 1,
            LOCATE(' ', SUBSTRING_INDEX(work_performed, '.', - 1))
        )
    ) m
FROM
    tablename


是要匹配模式,还是要实际提取匹配?请注意,仅使用MySQL很难生成预期的输出。最有可能的情况是,您将在表示层中生成。我希望选择指定字段中具有匹配项的所有行,但我希望显示触发匹配的内容,因为日志的条目有时是手动完成的,我不能期望它们100%正确。因此,我想看看匹配本身是什么。是否只有一个点是正确的。在我正在寻找的程序名称中,只能有一个DOT。我感谢您抽出时间回答。这对于这个例子来说是完美的,但不幸的是不够具体,我得到的所有记录都与我在问题中指定的模式不匹配。让我获得最佳正确匹配百分比的是正则表达式:“\uuuuuuuuuuuuuuuuu%”。但是ofc我不能用它来选择。有没有办法指定substr来更好地匹配它?