【发布时间】:2017-07-19 05:23:30
【问题描述】:
我正在使用包含大量数据(大约 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 | |
+----+-------------------------------------------+------------+
如果我没有提供足够的细节,我深表歉意,但我是一家大公司的实习生,我们对保密有非常严格的规定。
如果需要任何其他信息,我会尽力提供。
编辑
我一直在尝试使用正则表达式搜索我正在寻找的字符串,但我无法让它按我的意愿工作,这是我尝试过的:
SELECT * FROM tablename
WHERE `work_performed` regexp '% ([a-z]^3)([0-9]^3).([a-z]^3) %'
ORDER BY id DESC;
【问题讨论】:
-
您想match 模式,还是实际上也想extract 匹配?请注意,仅使用 MySQL 很难生成您的预期输出。您很可能会在表示层中生成它。
-
我想选择在指定字段中匹配的所有行,但我想显示触发匹配的原因,因为日志的条目有时是手工完成的,我真的不能指望它们100% 正确。因此,我想看看比赛本身是什么。
-
可能只有一个点
.? -
@RomanPerekhrest 没错。在我正在寻找的程序名称中只能有一个点
标签: mysql database pattern-matching data-analysis