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.
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
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
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 232820
Url: https://administrator.de/contentid/232820
Ausgedruckt am: 22.11.2024 um 15:11 Uhr
2 Kommentare
Neuester Kommentar
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
Gruß, Mad Max
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
Gruß, Mad Max