2010-12-22 6 views
13

Ich habe eine Tabelle mit einer Spalte mit Daten, die auch mit Zahlen beginnen, auf MySQLWählen Sie Werte, die mit einer Zahl beginnen

Wie kann ich die Zeilen auswählen, die nur mit einer Zahl beginnen?

+0

gleiche allgemeine Stimmung wie diesen Thread, wie man [Detect, wenn der Wert Zahl in MySQL ist] (https://stackoverflow.com/q/5064977/1366033), aber nur auf den ersten char – KyleMit

Antwort

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

+1 für 'REGEXP' (ich glaube nicht,' LIKE' unterstützt RegEx (wie @RedFilter) impliziert hat). Allerdings würde ich wahrscheinlich ''^ [0-9] +' 'als ein Muster selbst verwenden. –

+0

'%' funktioniert nicht mit regexp. Es funktioniert mit Gleichem. – codaddict

+0

@Brad: Guter Punkt für den regulären Ausdruck, ich werde aktualisieren :) – Sarfraz

7

können Sie tun:

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

Der reguläre verwendete Ausdruck ist ^[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 

effektiv versuchen wir diese Werte in der Spalte, die beginnen mit einer Ziffer auszuwählen.

Demo:

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

auch

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

'SELECT * FROM \' Künstler \ 'WHERE \' Artist \ 'LIKE '[0-9]%'' leer verwenden. – akinuri

+1

MySQLs "Like" unterstützt solche Muster nicht. Sie müssen 'regexp' dafür verwenden. Beispiel: 'SELECT * FROM foo WHERE bar REGEXP '^ [0-9]''. https://dev.mysql.com/doc/refman/5.7/en/pattern-matching.html –

3

Noch eine andere Art und Weise:

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

und mit gemeinsamen charsets und Sortierungen, das funktionieren würde und einen Index für die Spalte verwenden:

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

Eine andere Antwort ist:

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

"' RLIKE ist ein Synonym für REGEXP' " –

Verwandte Themen