2015-03-31 70 views
0

我知道有一个简单的方法来提供一个WHERE条件匹配MySQL中的正则表达式,但我的问题是不同的。列是这样的:MySQL和正则表达式 - 返回SELECT列与表的列的正则表达式匹配部分

jknewfjnkewnjkfewnjfwe1jnkf2jnw wefwef 1234567.12345678 qwrqwerqwrq 
jnewdnkewjk ewnfewf1 wefwefew2 1234568.22314152 qwrqwrqwr qw 
whjefjwefwe1 wefwefwef2 qweqwrqrw 1234369.21213131 qwdqwdqwd 

我想获得一个SELECT列SUBSTRING短语,表示将返回我:

selectcol1 selectcol2 
1234567  12345678 
1234568  22314152 
1234369  21213131 

我所知道的:第一匹配号码为7位,和第2匹配数字总是8位数字,并且前后的部分肯定不会与7位数字模式匹配。

有什么办法可以得到这些SELECT列吗?

回答

0

简短的回答:号长一点的回答......

REGEXP '[[:<:]][0-9]{7}[[:>:]].*[[:<:]][0-9]{8}[[:>:]]' 

将匹配的7个位数第一个“字”后(最终)由8位数字“字”。

示范(1 =真):

mysql> SELECT 'jnewdnkewjk ewnfewf1 wefwefew2 1234568.22314152 qwrqwrqwr qw' 
    ->  REGEXP '[[:<:]][0-9]{7}[[:>:]].*[[:<:]][0-9]{8}[[:>:]]' AS test; 
+------+ 
| test | 
+------+ 
| 1 | 
+------+ 
1 row in set (0.00 sec) 

请记住,SQL是不是一个好的语言提取这些领域。实际上,我会说你应该使用PHP(或其他语言)来提取的字段 MySQL找到并提取

也就是说,没有LOCATE()与正则表达式。

+0

如果它被普遍使用,我会使用算法语言,但在这种情况下,它只是“runonce报告惰性”,所以在这种情况下,性能无论如何不会影响。 (我也知道,像这样存储MySQL列是不好的,但这个数据库不是由我设计的) – dszakal 2015-04-01 08:38:35