SQL Strings mit unterschiedlichem Format abschneiden

h00bi

Fleet Admiral
Registriert
Aug. 2006
Beiträge
20.369
Hallo zusammen,

ich muss in einer Auswertung bei mehreren Strings den Anfang abschneiden. Mein Problem ist, dass der abzuschneidende Teil unterschiedlich lang ist, nämlich 4, 5 oder 6 Zeichen lang.
Beispiel:

894DE Meiler Bankhaus
45ES Lococita
2EN Helda Corp

Alles vor dem ersten Leerzeichen (und wenn möglich auch das erste Leerzeichen) muss wech so dass am ende das hier über bleibt:

Meiler Bankhaus
Lococita
Helda Corp

so dass man dann danach sortieren kann.
 
strpos (php) würde da zb. helfen.

Achja, welche Programmiersprache?
 
Zuletzt bearbeitet:
willst das direkt mit SQL machen?
Kannst das nicht auch einfach nach der abfrage weiter verarbeiten?

in mysql wäre der befehl field hilfreich: http://dev.mysql.com/doc/refman/5.1/de/string-functions.html
da könntest dir dann den index des ersten leerzeichen ausgeben lassen und von dort an alles abschneiden.

ansonsten mal nach "DEINE DB string functions" googlen da wirst du auf jedenfall fündig werden!

Wenn die Struktur aber immer so ist, würde es doch sinn machen den ersten Teil in eine eigene Spalte zu packen?
 
Leider stand nicht dabei, welche Datenbank betroffen ist und wo die Auswertung stattfinden soll. Hier mein Vorschlag für Oracle:
SUBSTR(name,INSTR(name,' ') + 1)
Liefert den Rest des Strings ab dem ersten gefundenen Leerzeichen. Funktioniert natürlich nicht, wenn es Datensätze gibt, die keinen solchen kryptischen Anfang haben.
 
Zuletzt bearbeitet:
Naja die Funktionen gibts in SQL Server natürlich auch, wenn auch ein wenig anders.

SUBSTRING(name, CHARINDEX(name, ' '), LEN(name))

Der dritte Parameter ist bei MS SQL anscheinend Pflicht, dort habe ich LEN(name) hingeschrieben, kann aber jede andere Zahl sein, die etwa der maximalen Feldlänge entspricht. Wenn dort mehr steht, als der String lang ist, wird nur bis zum String-Ende gegangen (ausgetrickst).
 
Ich würde es auch lieber anwendungsseitig lösen, weil es mit der Datenbank selbst ja gar nix zu tun hat. Alternativ würde ich für die Datenbank einen Trigger vorschlagen, der den Wert entsprechend vorbearbeitet bei INSERT und UPDATE. Manuell bei jeder Datenbankoperation solltest du nicht machen, weils schnell unübersichtlich wird.
 
IceMatrix schrieb:
der den Wert entsprechend vorbearbeitet bei INSERT und UPDATE.
Der Wert soll nicht in der DB stehen, da muss der ursprüngliche Wert bleiben.

IceMatrix schrieb:
Manuell bei jeder Datenbankoperation solltest du nicht machen

Das soll nicht bei JEDER DB Operation gemacht werden, sondern bei 1 Abfrage die nur alle paar Tage ausgeführt wird. Jegliche Nacharbeiten sollen aber auf ein minimum reduziert werden.


MistaJack schrieb:
Naja die Funktionen gibts in SQL Server natürlich auch, wenn auch ein wenig anders.
Code:
SUBSTRING(name, CHARINDEX([COLOR="Red"]name, ' '[/COLOR]), LEN(name))
Der dritte Parameter ist bei MS SQL anscheinend Pflicht, dort habe ich LEN(name) hingeschrieben, kann aber jede andere Zahl sein, die etwa der maximalen Feldlänge entspricht. Wenn dort mehr steht, als der String lang ist, wird nur bis zum String-Ende gegangen (ausgetrickst).

das war FAST richtig, die reihenfolge der argumente ist bei dir falsch. Du must erst den Suchstring Leerzeichen ' ' definieren und dann wo gesucht werden soll.


So ists richtig:
Code:
SUBSTRING(name, CHARINDEX([COLOR="Red"]' ', name[/COLOR]), LEN(name))

besten Dank an alle!
 
h00bi schrieb:
das war FAST richtig, die reihenfolge der argumente ist bei dir falsch. Du must erst den Suchstring Leerzeichen ' ' definieren und dann wo gesucht werden soll.


So ists richtig:
Code:
SUBSTRING(name, CHARINDEX([COLOR="Red"]' ', name[/COLOR]), LEN(name))

besten Dank an alle!

Ah ok, sorry. Aber hast ja gefunden, wie es korrekt formuliert wird. :)
 
Zurück
Oben