我正在使用包含大量数据(约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;
答案 0 :(得分:1)
使用CONCAT
,SUBSTR
,SUBSTRING_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
https://dev.mysql.com/doc/refman/5.7/en/string-functions.html