2017-06-26 1 views
0

Lassen Sie uns den Text Beispiel unten betrachten:Sql auszuwählen und 10 Zeichen zu extrahieren, bevor mit jeweils 10 Zeichen nach einer Teil in Oracle Clob

Lorem Ipsum ist einfach Dummy-Text der Druck und Satz Industrie. Lorem Ipsum ist der Standard Dummy-Text der Industrie aller Zeiten seit den 1500s, als ein unbekannter Drucker eine Galeere des Typs nahm und es durcheinander mischte, um ein Art Musterbuch zu bilden. Es hat nicht nur fünf Jahrhunderte überlebt, sondern auch den Sprung in den elektronischen Satz, im Wesentlichen unverändert geblieben. Es wurde in den 1960er Jahren mit die Freisetzung von Letraset Blätter mit Lorem Ipsum Passagen und vor kurzem mit Desktop-Publishing-Software wie Aldus PageMaker einschließlich Versionen von Lorem Ipsum popularisiert.

Wie kann ich 10 Zeichen extrahieren, bevor mit jeweils 10 Zeichen nach der Teilkette, sagen wir mal ‚Lorem Ipsum‘ aus dem obigen Absatz in Oracle? Der Datentyp ist clob. Ich habe mit Oracle-Funktionen wie SUBSTR versucht, aber bisher kein Glück. Danke für die Hilfe von allen.

+0

Sie wollen also 'Industrie. Lorem Ipsum war "in deiner Ausgabe? – GurV

+0

Benötigen Sie es, um bei jedem Auftreten Ihrer gegebenen Zeichenfolge oder nur beim ersten oder n-ten Auftreten zu arbeiten? Was passiert, wenn ein Vorkommen der angegebenen Zeichenfolge keine vorherigen/nachfolgenden Zeichen enthält? –

+0

Was ist die gewünschte Ausgabe - zwei neue Spalten (in der Ausgabe), eine zeigt die zehn Zeichen vor und die anderen die zehn Zeichen nach? Dann: NULL für die "zehn Zeichen vor" anzeigen, wenn Lorem Ipsum genau am Anfang der Zeichenfolge steht? Was ist, wenn vom Anfang der Saite bis Lorem Ipsum genau sechs Zeichen vorhanden sind? Dann: Was ist, wenn Lorem Ipsum mehr als einmal im Text erscheint? Zum Beispiel: Was ist die gewünschte Ausgabe von der Zeichenfolge ''Lorem Ipsum gewinnt. Lorem Ipsum. – mathguy

Antwort

0

Sie können regexp_replace mit zurück Referenzen verwenden:

select 
    regexp_replace(col, '.*?(.{0,10}Lorem Ipsum.{0,10}).*?','\1') 
from t; 

Hier . jedes Zeichen und ? für faule Matching ist. Für den gegebenen Eingang produziert es:

Lorem Ipsum is simplyindustry. Lorem Ipsum has been ontaining Lorem Ipsum passages,rsions of Lorem Ipsum. 
+0

Danke. Ich denke, ich habe es versucht. Aber ich möchte, dass die Ausgabe die folgende ist: * Lorem Ipsum ist einfach, Industrie. Lorem Ipsum hat, Lorem Ipsum Passagen, Positionen von Lorem Ipsum erhalten. * – user3376592

+0

@ user3376592 - Aktualisiert die Antwort. Bitte versuchen Sie es jetzt. – GurV

+0

@ Gurwinder Singh Nochmals vielen Dank für Ihre Hilfe. Die Abfrage scheint richtig zu sein, aber sie ist sehr langsam und gibt die gesamten Clob-Daten als Ausgabe anstelle der Zeichenfolge zurück. Der Spaltentyp ist clob. Müssen wir etwas Besonderes tun, um als String aus dem Clob auszugeben? – user3376592

Verwandte Themen