Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

String mit charindex abtrennen und splitten

Frage Entwicklung Datenbanken

Mitglied: 0belixx

0belixx (Level 1) - Jetzt verbinden

17.03.2014, aktualisiert 15:33 Uhr, 1859 Aufrufe, 2 Kommentare

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.

01.
... 
02.
    left( Bemerkung, charindex(' ',Bemerkung,20)) AS 'B1', 
03.
    SubString (Bemerkung, 20, charindex (' ', Bemerkung,20)) AS 'B2', 
04.
    SubString (Bemerkung, 40, charindex (' ', Bemerkung,20)) AS 'B3' 
05.
......(usw, usw,usw) 
06.
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
Mitglied: MadMax
17.03.2014 um 17:02 Uhr
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
Bitte warten ..
Mitglied: 0belixx
18.03.2014 um 08:41 Uhr
Zitat von MadMax:


Vielleicht bringen Dich meine geistigen Ergüsse ja weiter


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
Bitte warten ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

Information von nikoatit zum Thema Humor (lol) ...

Ähnliche Inhalte
C und C++
gelöst Anzahl der Buchstaben in einem String Element Array C++ (3)

Frage von Protected zum Thema C und C ...

C und C++
String einlesen in Array und wieder ausgeben von hinten (4)

Frage von Protected zum Thema C und C ...

Batch & Shell
gelöst Splitten in Batch. Wo liegt der Fehler!? (4)

Frage von Todybear zum Thema Batch & Shell ...

Batch & Shell
gelöst Poweshell Script soll String ersetzen und die leere Zeile löschen (4)

Frage von Mars123 zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Windows Server
DHCP Server switchen (25)

Frage von M.Marz zum Thema Windows Server ...

SAN, NAS, DAS
gelöst HP-Proliant Microserver Betriebssystem (14)

Frage von Yannosch zum Thema SAN, NAS, DAS ...

Grafikkarten & Monitore
Win 10 Grafikkarte Crash von Software? (13)

Frage von Marabunta zum Thema Grafikkarten & Monitore ...

Erkennung und -Abwehr
Spam mit eigener Domain (12)

Frage von NoobOne zum Thema Erkennung und -Abwehr ...