Wie extrahiert numerische Daten aus SQL Ergebnis
Angenommen, es gibt eine Tabelle "A" mit den 2 Spalten - ID (INT), DATA (VARCHAR(100)).
Ausführen "WÄHLEN Sie DATEN AUS EINEM" Ergebnisse in einer Tabelle sieht wie folgt aus:
DATA
---------------------
Nowshak 7,485 m
Maja e Korabit (Golem Korab) 2,764 m
Tahat 3,003 m
Morro de Moco 2,620 m
Cerro Aconcagua 6,960 m (located in the northwestern corner of the province of Mendoza)
Mount Kosciuszko 2,229 m
Grossglockner 3,798 m
// the DATA continues...
---------------------
Wie kann ich extrahieren Sie nur die numerischen Daten, die mit irgendeiner Art von string-Bearbeitung Funktion in der SELECT-SQL-Abfrage, so dass das Ergebnis aus einer modifizierten WÄHLEN würde wie folgt Aussehen:
DATA (in INTEGER - not varchar)
---------------------
7485
2764
3003
2620
6960
2229
3798
// the DATA in INTEGER continues...
---------------------
Durch die Art und Weise, am besten wäre es, wenn dies getan werden könnte, in einer einzigen SQL-Anweisung. (Ich bin mit IBM DB2 version 9.5)
Dank 🙂
- Welche Plattform verwenden Sie?
- IBM DB2 version 9.5 (Die neue version, die XML-Speicherung unterstützen nativ.)
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich weiß, dieser thread ist alt, und die OP muss dann nicht die Antwort, aber ich hatte, um dies herauszufinden, mit ein paar Tipps aus diesem und anderen threads. Sie scheinen alle zu sein, fehlt die genaue Antwort.
Den einfachen Weg, dies zu tun ist, um
TRANSLATE
alle unnötigen Zeichen zu einem einzigen Zeichen, dannREPLACE
dass einzelne Zeichen mit einem leeren string.Brechen die
TRANSLATE
Befehl:z.B.
** Hinweis: ich kann nicht sprechen, Leistung oder version Kompatibilität. Ich bin auf eine 9.x-version von DB2, und neue Technologie. Hoffe, das jemand hilft.
REPLACE
hier, wenn der erste parameter''
es entfernt alle diese Zeichen ein. Sie können auch dieUPPER
- Funktion, so dass Sie nicht haben, um Liste in Kleinbuchstaben.REPLACE
erforderlich ist (zumindest auf meinem 9.x-version von DB2). Auch die Verwendung vonUPPER()
würde der Arbeit, und vereinfacht den Befehl übersetzen, aber ich bin mir nicht sicher, ob das insgesamt leistungsfähiger.u
ibm.com/support/knowledgecenter/SSEPGG_9.7.0/... Sind Sie mit einer version vor version 9.7? 🙂 soTRANSLATE(x, '1234567890', '1234567890....' )
würde funktionieren.In
Oracle
:In
PostgreSQL
:In
MS SQL Server
undDB2
, Sie müssen, umUDF
's für reguläre Ausdrücke und Abfragen wie diese.Siehe links für weitere details.
Tun, eine schnelle Suche auf Linie für DB2-die beste eingebaute Funktion, die ich finden kann, ist Übersetzen mit ihm können Sie eine Liste der Zeichen, die Sie ändern wollen, auf andere Zeichen. Es ist nicht ideal, aber Sie können angeben, jede Figur, die Sie wollen, um Streifen aus, das heißt, jedes nicht numerische Zeichen zur Verfügung...
(Ja, das ist eine lange Liste, sehr lange Liste, die ist, warum ich sagen, es ist nicht ideal)
TRANSLATE('data', 'abc...XYZ,./\<>?|[und so weiter]', ' ')
Alternativ müssen Sie erstellen eine benutzerdefinierte Funktion, um die Suche für die Anzahl. Es gibt ein paar alternativen für das.
Überprüfen jedes Zeichen einzeln aus und halten Sie es nur, wenn es einen numerischen.
Wenn Sie wissen, was vorangeht, die Anzahl und das, was folgt, die Anzahl, können Sie Sie suchen und behalten, was ist in zwischen...
Deutlich machen, Dems ist suggeston, der Ansatz, den ich verwendet habe, ist eine Skalare benutzerdefinierte Funktion (UDF) nimmt eine alphanumerische Zeichenfolge und rekursiv iteriert durch die Zeichenfolge (ein byte pro iteration) und unterdrückt die nicht-numerischen Zeichen in der Ausgabe. Der rekursive Ausdruck generiert eine Zeile pro iteration, aber nur die Letzte Zeile gehalten wird und an die aufrufende Anwendung zurückgegeben.