Sortieren, Trennzeichen getrennte Werte in einem string mit (Oracle), SQL
Sagen, Sie haben
select '9|2|6|7|5' as somedata from dual
Gibt es eine Möglichkeit, wo ich etwas tun könnte wie:
select
in_string_sort('|', a.somedata)
from
(select '9|2|6|7|5' as somedata from dual) a
So, das Ergebnis wäre '2|5|6|7|9'
?
Ich weiß, könnte ich eine Funktion, um das zu bekommen, aber das ist so basic-ich Frage mich, ob Oracle hätten einige built-in-Funktion für diese Art der Sache.
[BEARBEITEN] vergaß zu erwähnen: dies würde in der Oracle 10gR2.
- Diese Funktion ist nicht "basic", weil es nicht benötigt wird. Die Speicherung von getrennten Daten in einer einzelnen Spalte ist eine schlechte Idee und die falsche datamodel
- Naja.. ich denke, es ist sicher zu sagen, dass die Dinge ist sicher ein Grundbedürfnis. Diese könnte man zu sehr spezifischen, aber das ich die Idee scheint fair. Auch dies hat nichts zu tun mit Speicher-Problemen - ist nicht über aggregierte strings, das ist ein Recht häufiges Problem, da draußen in der Google... ich bin auf der Suche nach diesem cos in meinem Fall eine ein bisschen zu viel Schmerz, zu aggregieren bereits bestellt.
- Aggregierte Saiten wie die deine gegen die elementaren Prinzipien für gutes Datenbankdesign: Normalisierung. Wenn Sie gewählt hatte, um zu speichern diese zahlen, die als Zeilen, die Lösung ist so einfach wie mit
ORDER BY
- Ernsthaft... das ist nicht der Punkt dieser Frage.
Du musst angemeldet sein, um einen Kommentar abzugeben.
So weit ich weiß, gibt es keine solche eingebaute Funktion. Sie sagen nicht, welche version, also werde ich davon ausgehen, 11g. Diese Abfrage sollte es für Sie tun:
Dies ist eine ältere Frage, aber ich rannte über es die Suche nach einer Lösung zu meinem speziellen problem. Die Antwort von RichardJQ ist gut, aber es funktioniert nur für einzelne char-Felder (Länge 1) und Ziffern. Außerdem wollte ich zur Vereinfachung der Lösung auf die Verwendung von regexp-Funktionen in neueren Versionen von Oracle. Der folgende Codeausschnitt funktioniert für Felder mit jedem char Länge und alphanumerische Werte. Diese Lösung funktioniert mit 11g oder neuere.