0belixx
Goto Top

String mit charindex abtrennen und splitten

Hallo Leute,

folgendes Problem ich muss Text aus eine Datenbank in eine andere bringen, wobei der Ursprungstext bis zu 150 Zeichen in eine Spalte hat.
Die Ziel Spalten haben aber nur 25 Zeichen dafür habe ich aber 10 Stück a 25 Zeichen.


Mal ein Beispiel

Folgender Text soll getrennt werden.
Ich lieg gern im Gras und schau zum Himmel rauf, schaun die ganzen Wolken nicht lustig aus?


Ich wollte nach 20 Zeichen das Leerzeichen suche lassen und dann den Text von Stelle 0 bis Leerzeichen in eine Spalte schreiben,
danach von diesem Leerzeichen aus die nächsten 20 Zeichen wieder in eine Spalte schreiben usw.

...
    left( Bemerkung, charindex(' ',Bemerkung,20)) AS 'B1',  
    SubString (Bemerkung, 20, charindex (' ', Bemerkung,20)) AS 'B2',  
    SubString (Bemerkung, 40, charindex (' ', Bemerkung,20)) AS 'B3'  
......(usw, usw,usw)
from .....


Aber der Text wir immer mitten im Text getrennt.

Ich lieg gern im Gras
und schau zum Himme
l rauf, schaun die g
ganzen Wolken nicht
lustig aus?

Ist da meine Herangehensweise falsch?
Wäre schön wenn da mal jemand helfend eingreifen könnte.
Vielen Dank
0belixx

Content-Key: 232820

Url: https://administrator.de/contentid/232820

Printed on: April 25, 2024 at 03:04 o'clock

Member: MadMax
MadMax Mar 17, 2014 at 16:02:42 (UTC)
Goto Top
Hallo 0belixx,

mit einer simplen Abfrage wirst Du eine sinnvolle Trennung wahrscheinlich nicht hinbekommen.

Das Problem bei Deiner momentanen Abfrage ist, daß "charindex(' ',Bemerkung,20)" immer den Wert 22 zurückliefert (nur bei diesem Text natürlich). Du liest also ab Position 0, 20, 40, ... immer 22 Zeichen, hast also feste Werte, die zwar mal zufällig ein Leerzeichen treffen können, aber eben nur zufällig. Und eine Überschneidung von zwei Zeichen. Weder Deine Startpunkte, noch Deine Längen sind also dynamisch. Aber das bekommst Du eben auch kaum in einer Abfrage hin. Ich denke zwar mal, es ginge, aber so eine Abfrage willst Du nicht.

Ich sehe da drei mögliche Lösungen:
1. wenn es nicht so arg viele Daten sind: Trennung von Hand

2. die einfache: Leerzeichen spielen keine Rolle, alle 25 Zeichen ist Cut und fertig. Vernünftige Trennungen werden nach und nach manuell vorgenommen.

3. Du schreibst Dir eine Routine, die jeden Text trennt (oder erst mal nur analysiert und die Werte in eine temporäre Tabelle schreibt und anschließend in einem weiteren Durchgang trennt):
- ab Zeichen 26 wird rückwärts nach dem ersten Leerzeichen gesucht
- wird eins gefunden, werden die Zeichen davor in Textspalte1 geschrieben, nächster Startpunkt ist das Zeichen danach
- wird keins gefunden, werden die ersten 25 Zeichen in Textspalte1 geschrieben, nächster Startpunkt ist Zeichen 26
- ab Zeichen Startpunkt + 26 wird wieder rückwärts nach dem Leerzeichen gesucht usw.

Du mußt Dir dann Gedanken machen, was mit den Leerzeichen passieren soll, bei obigem Vorschlag fliegt ein Leerzeichen beim Übergang raus, ist das so ok, was sollte mit mehreren aufeinanderfolgenden Leerzeichen passieren? Wenn es nicht gelöscht werden soll, soll es am Anfang oder am Ende eines Textes stehen (am Ende kann es bei manchen Anwendungen dann automatisch entfernt werden)?

Theoretisch können Dir die zehn Spalten à 25 Zeichen dabei auch knapp werden, aber da es insgesamt 100 Zeichen mehr sind, ist das recht unwahrscheinlich.

Vielleicht bringen Dich meine geistigen Ergüsse ja weiter face-smile

Gruß, Mad Max
Member: 0belixx
0belixx Mar 18, 2014 at 07:41:12 (UTC)
Goto Top
Zitat von @MadMax:


Vielleicht bringen Dich meine geistigen Ergüsse ja weiter face-smile


Hi Mad Max,

Danke für die Antwort. Die Möglichkeiten die du aufgezählt hast sind mir auch schon durch den Kopf gegangen. Ich löse das jetzt in dem ich einfach ein weitere Spalte mit den jeweiligen Werten aus dem charindex fülle und dann mit diesen im substring rechne.

Gruss
0belixx