2015-03-31 64 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