2017-03-29 3 views
3

Dies ist Tabelle WWE:ungerade Zahlen auswählen und enthält keine Sonderzeichen

|**Col A** | **Col B** | 
    -+-----------+-----------+-  
    | Hello  | 9%15A  |  
    | World  | 2*10  |  
    | Cat  | 12  |  
    | Dog  | 13  | 

Col B ist Varchar (100)

Wie wähle ich alle Zeilen nur aus ungeraden Zahlen bestehen und enthält keine ‚%‘ oder '*' oder Alphabete ??

Ich weiß, wie ungerade Zahlen zu bekommen: colB % 2 <> 0

Aber ich weiß nicht, wie die Sonderzeichen auszunehmen und die Zahl als Zahl zu berechnen, da sie in VARCHAR gespeichert sind

Zum Beispiel in In dieser Tabelle wird der Ausgang

| Dog | 13 | 

Antwort

1

USE REGEXP sein, wenn Sie nur numerische Ergebnis benötigen:

SELECT * FROM WWE WHERE colB REGEXP '[0-9]' AND colB mod 2 = 1 
+0

es noch Ausgangsdaten mit Sonderzeichen und Alphabete – user6308605

+0

keine Änderungen am Ausgang – user6308605

+0

fügen Sie eine Klammer für ungerade Zahlprüfung hinzu und versuchen Sie. –

1

Oder verwenden Sie die ISNUMERIC Funktion

SELECT * FROM WWE WHERE ISNUMERIC(colB) = 1 AND colB % 2 <> 0 
+0

Was ist das Äquivalent für ISNUMERIC in MySQL? – user6308605

+0

Habe nicht bemerkt, dass es für MySQL war, ich denke, du musst mit dem Regex gehen. – Kevin

+0

ist es in Ordnung :) Danke! – user6308605

3

Sie können beide Bedingungen überprüfen Sie mit einem einzigen regulären Ausdruck:

SELECT * FROM WWE WHERE colB REGEXP '^[[:digit:]]*[13579]$'; 

, die als gelesen werden konnte:

beginnt mit einem Ziffer, gefolgt von einer beliebigen Anzahl von Ziffern und Beenden mit einem dieser Zeichen (1,3,5,7)

Für diese Beispieldaten

|**Col A** | **Col B** | 
    -+-----------+-----------+-  
    | Hello  | 9%15A  |  
    | World  | 2*10  |  
    | Cat  | 12  |  
    | Dog  | 13  | 

Returns

|**Col A** | **Col B** | 
    -+-----------+-----------+-  
    | Dog  | 13  | 

Aktualisiert für einstelligen Bereich Rechnung zu tragen, dank @Thorsten Kettner

+0

für was ist 13579? – user6308605

+1

es ist eine Möglichkeit zu garantieren, dass es eine ungerade Zahl ist, ungerade Zahlen enden in einer ungeraden Zahl –

+0

Okay, verständlich. Kann es für eine Zahl wie diese 235 – user6308605

Verwandte Themen