2016-12-14 96 views
0
SELECT 'Some more(user) found = 50' REGEXP '\d+' as T; 

結果:MySQL的REGEXP選擇數字

+---+ 
| T | 
+---+ 
| 1 | 
+---+ 
1 row in set (0.00 sec) 

我期待

50 

什麼是正確的REGEXP選擇一個或多個數字?

+1

首先,在MySQL REGEXP中不支持'\ d'。其次,您不能使用REGEXP來獲取部分條目,它只會檢查條目是否包含某種模式。 –

+0

如果您可以向我們展示更多數據,也許還有其他一些解決方法。 –

+0

我有像例子中顯示的文字。我想知道是否有辦法從文本中提取數字,並將它們視爲數字。 – Sudheer

回答

0

你需要一個函數:

DROP FUNCTION IF EXISTS STRIP_NON_DIGIT; 
DELIMITER $$ 
CREATE FUNCTION STRIP_NON_DIGIT(input VARCHAR(255)) 
    RETURNS VARCHAR(255) 
BEGIN 
    DECLARE output VARCHAR(255) DEFAULT ''; 
    DECLARE iterator INT   DEFAULT 1; 
    WHILE iterator < (LENGTH(input) + 1) DO 
     IF SUBSTRING(input, iterator, 1) IN ('0', '1', '2', '3', '4', '5', '6', '7', '8', '9') THEN 
     SET output = CONCAT(output, SUBSTRING(input, iterator, 1)); 
     END IF; 
     SET iterator = iterator + 1; 
    END WHILE; 
    RETURN output; 
END 
$$ 
DELIMITER ; 

mysql> SELECT STRIP_NON_DIGIT('Some more(user) found = 50') AS n; 
+------+ 
| n | 
+------+ 
| 50 | 
+------+ 
1 row in set (0.00 sec) 
0

MySQL的正則表達式不包括最反斜槓快捷方式。

而不是\d,請使用[0-9][[:digit:]]