nachdem ich mittels Suche hier schon oft Lösungen für das eine oder andere Datenbankproblem gefunden habe (meinen herzlichen Dank den fleißigen Helfern!), nun nach längerer Zeit mal wieder eine Aufgabe, bei der ich nicht recht weiß, wie anstellen...
Es geht grob formuliert darum, einen Substring aus mehreren Spalten einer Tabelle auszulesen und ihn mittels Abfrage (?) quasi per Knopfdruck im jeweils aktuellen Datensatz irgendwie (bin da offen) anzeigen zu lassen, um ihn zu kopieren und in anderen Programmen einzupflegen/weiterzubearbeiten.
Zwei Schwierigkeiten hab ich da, die erste und vermutlich kniffligste ist das konkrete Auslesen eines Teiles des Substrings, quasi der SubSubstring.... also der Tanga unterm Schlüpper


Also worin besteht die Kniffligkeit? Das liegt an einem konkreten Textfeld, das vom Substring zu Teilen erfaßt werden soll:
Der Substring soll zunächst in einem Feld/Spalte die ersten Zeichen bis zum Auftauchen eines (immer vorhandenen) Kommas zurückgeben. Soweit ok, läuft. Als nächstes die ersten vier Zeichen eines anderen Feldes/Spalte, tutti paletti. Dann noch ein ganzes Feld/Spalte, nitschewo problem. Beim vierten Feld/Spalte, das ausgelesen werden soll, wird's dann aber gemein: Das Feld enthält unterschiedlich lange und grundverschiedene Texte. Aus diesen Texten benötige ich die ein-zwei längsten Wörter oder aber wenigstens ein Destillat, bei dem alle kürzeren Wörter und Satzzeichen rausfliegen und alle längeren stehen bleiben (s.u.). Und da hab ich irgendwie keine rechte Idee, wie man das anstellen könnte.
Als vielleicht brauchbarer Ansatz erscheint mir die Überlegung, daß man alle Leerzeichen entfernen könnte und mittels Vergleich der Zeichenanzahl zum ursprünglichen Text schon mal die Anzahl der Worte rauskriegt (womit zugleich auch ein Wert für die mittlere Zeichenanzahl der im Textfeld enthaltenen Worte dargestellt werden könnte, so daß man immerhin wüßte "oberhalb" welchen Wertes die längeren Worte, bzw. unterhalb welchen Wertes die kürzeren Worte des Feldes angesiedelt sind).
fiktives Beispiel:
Textfeld: "Die Rolle Japans beim Untertunneln des Mariannengrabens"
= 55 Zeichen, davon 6 Leerzeichen, ergo 7 Worte, deren mittlere Länge bei knapp über 6 liegt, alles über SQL leicht zu ermitteln. Es steht damit also fest, daß wenigstens ein Wort über 6 Zeichen enthalten ist - das/die will ich. Nur wie komm ich an das Ding/die Dinger ran?
Hat jemand von euch guten Geistern eine Idee/Lösungsansatz, wie das in SQL zu bewerkstelligen wäre?
Ich hab schon überlegt, ob man sich nicht von Rechts und Links an das längste Wort ranpirschen kann, indem man die Leerzeichen der Reihe nach und von beiden Seiten abklappert und die zurückgelegte Wegstrecke im Feld dann von der Gesamtzeichenzahl abzieht - irgendwann stößt man so dann ja aufs längste Wort, aber die Umsetzung in SQL wäre vermutlich dermaßen häßlich, daß man sich sehr zusammenreißen müßte um nicht entweder in den Bildschirm zu speien, oder alternativ: irre vor dem Code zu werden.
Noch zur Erläuterung: Das fragliche Textfeld ist zwar von Datensatz zu Datensatz völlig verschieden befüllt und im Prinzip in der Länge unbegrenzt, es reicht für mich aber aus, wenn man etwa auf der Länge des o.g. Beispieles - also unter den ersten 50-70 Zeichen arbeitet. Das ist ja auch leicht umsetzbar, also darüber keine Gedanken machen...
Nachsatz:
Jetzt hatte ich doch gerade den schönen feuchten Traum, man könnte mit REPLACE und wildcards einfach den Mittelwert der Zeichenanzahl als Grundlage für die Löschung aller Worte mit einer Zeichenanzahl unterhalb dieses Wertes nehmen, nur leider leider sehe ich nun, das REPLACE keine wildcards unterstützt (grrrr!). Aber dieser umgekehrte Ansatz - die von der Zeichenanzahl unterhalb des Durchschnittswertes liegenden Worte zu entfernen, statt die längsten herauszufiltern, mag vielleicht dennoch eher möglich sein?! Evtl. würde es auch schon reichen (quasi als dritter Lösungsansatz) alle 2-, 3- und 4-buchstabigen Wörter zu entfernen....nur - gleiches Problem - wie greife ich die da mit SQL raus, wenn Anzahl und Position der Leerzeichen einfach schwer variabel ist? Ich komm einfach auf keine gescheite Idee....
Beste Grüße,
Dru Drury