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

résultats:MySQL REGEXP pour sélectionner chiffres

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

J'attends

50 

Quel est le REGEXP correct pour sélectionner un ou plusieurs chiffres?

+1

D'abord, '\ d' n'est pas supporté dans MySQL REGEXP. Deuxièmement, vous ne pouvez pas utiliser REGEXP pour récupérer des parties d'entrées, il vérifie seulement si une entrée contient un motif. –

+0

Si vous pouvez nous montrer plus de données, il y a peut-être une autre solution. –

+0

J'ai un texte comme celui montré dans l'exemple. Je me demandais s'il y avait un moyen d'extraire les chiffres du texte et de les traiter comme des nombres. – Sudheer

Répondre

0

Vous avez besoin d'une fonction pour cela:

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

de regexp de MySQL ne comprend pas la plupart des raccourcis backslash.

Au lieu de \d, utilisez [0-9] ou [[:digit:]].