2010-12-22 28 views
13

Tengo una tabla con una columna que contiene los datos que comienzan con los números también, en MySQLSeleccione los valores que comienzan con un número

¿Cómo puedo seleccionar las filas que comienzan solamente con un número?

+0

sentimiento general Igual que este hilo sobre cómo [Detectar si el valor es el número de MySQL] (https://stackoverflow.com/q/5064977/1366033), pero solo restringido a la primera char – KyleMit

Respuesta

28
SELECT * FROM YourTable WHERE YourColumn regexp '^[0-9]+' 
+1

+1 para 'REGEXP' (no creo que 'LIKE' admita RegEx (como @RedFilter) ha implicado). Sin embargo, probablemente usaría ''^ [0-9] +'' como un patrón yo mismo. –

+0

'%' no funciona con regexp. Funciona con like. – codaddict

+0

@Brad: Buen punto para la expresión regular, actualizaré :) – Sarfraz

7

que puede hacer:

SELECT * 
FROM MyTable 
WHERE MyColumn REGEXP '^[0-9]'; 

La expresión regular es utilizado ^[0-9].

^ - Start anchor, used to ensure the pattern matches start of the string. 
[ - Start of character class. 
0-9 - Any digit 
] - End of character class 

Efectivamente estamos tratando de seleccionar los valores en la columna que empezar con un dígito.

Demostración:

mysql> select * from tab; 
+-------+ 
| col | 
+-------+ 
| 1foo | 
| foo | 
| 10foo | 
| foo10 | 
+-------+ 
4 rows in set (0.00 sec) 

mysql> select * from tab where col regexp '^[0-9]'; 
+-------+ 
| col | 
+-------+ 
| 1foo | 
| 10foo | 
+-------+ 
2 rows in set (0.00 sec) 
6

también

SELECT * FROM YourTable 
WHERE YourColumn LIKE '[0-9]%'; 
+1

'SELECCIONAR * FROM \' artistas \ 'WHERE \' artist \ 'LIKE '[0-9]%'' devuelve vacío. – akinuri

+1

El 'me gusta 'de MySQL no admite tales patrones. Tienes que usar 'regexp' para eso. por ejemplo: 'SELECT * FROM foo WHERE barra REGEXP '^ [0-9]''. https://dev.mysql.com/doc/refman/5.7/en/pattern-matching.html –

3

embargo, otra forma:

WHERE LEFT(columnName,1) IN ('0','1','2','3','4','5','6','7','8','9') 

y con juegos de caracteres y colaciones comunes, esto iba a funcionar y utilizar un índice en la columna:

WHERE columnName >= '0' AND columnName < ':' 
1
SELECT * FROM TABLE T 
WHERE T.COLUMNNAME REGEXP '^[0-9]'; 

Otra respuesta es:

SELECT * FROM TABLE T 
WHERE T.COLUMNNAME RLIKE '^[0-9]'; 
+0

"' RLIKE es un sinónimo de REGEXP' " –

Cuestiones relacionadas