MySQL模式匹配 - 找到匹配项

时间:2017-02-28 09:51:35

标签: mysql database pattern-matching data-analysis

我正在使用包含大量数据(约10,000条记录)的MySQL数据库。数据库中的数据是记录机器维护,其中一个字段包含一个基本时间线(只是带时间戳的步骤),解释了所有已完成的工作。在这个领域,我正在寻找可以指示某些程序的某些字符串(即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;

1 个答案:

答案 0 :(得分:1)

使用CONCATSUBSTRSUBSTRING_INDEXLOCATE函数的解决方案:

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

https://dev.mysql.com/doc/refman/5.7/en/string-functions.html

DEMO link