I eine Tabelle mit einer Spalte "Beschreibung" haben, welche die folgenden Werte hat:Oracle: to_number() mit substr kombiniert() und REGEXP_LIKE() in WHERE-Klausel
- OPTestMachine
- OPManualTesting OP1010
So die select-Anweisung, um die Werte zu erhalten, wäre nur
SELECT description
FROM operation;
Ich möchte die Zahl "1010" (oder eine beliebige Zeichenfolge, die dem substr() -Kriterium entspricht) extrahieren und die "gefundene Zeichenfolge" in eine ganze Zahl umwandeln, wenn möglich.
So kam ich mit auf den Punkt:
SELECT to_number(substr(description, 3, 4))
FROM operation
WHERE regexp_like(substr(description, 3, 4), '^\d+(\.\d+)?$', '')
Das Ergebnis ist schlicht und einfach: "1010"
Das ist für mich ziemlich gut funktioniert.
Jetzt der schwierige Teil für mich: Ich möchte die substr() verwenden - Ergebnis in der WHERE-Klausel
Etwas wie folgt aus:
SELECT to_number(substr(description, 3, 4))
FROM operation
WHERE regexp_like(substr(description, 3, 4), '^\d+(\.\d+)?$', '')
AND substr(description, 3, 4) < 2000;
Als ich das bekomme ich die Fehlermeldung " Ungültige Nummer". Ich denke, es liegt an der Reihenfolge, wie der Server die Select-Anweisung analysiert.
Wenn Sie jede Hilfe zur Verfügung stellen könnten, wäre das großartig!
Es tut mir leid, aber ich habe bereits versucht, und es gibt das gleiche zurück Fehler "Ungültige Nummer" – rwur
Meine Ahnung hier ist, dass die Sub string gibt etwas anderes als eine Zahl zurück und verursacht einen Absturz. Versuchen Sie es zu trimmen, falls es auf Leerzeichen stößt: 'AND to_number (ltrim (rtrim (substr (Beschreibung, 3, 4)))) <2000;' – Sebz
yeah, Sie haben Recht! Die zweite Lösung mit Trim funktioniert! – rwur