ich arbeite mit Oracle und suche nach einer Abfragemöglichkeit, die auf der Wörteranzahl in einer bestimmten Spalte basiert … habe schon alle möglichen Hilfeseiten durchforst, aber noch keine Möglichkeit gefunden … Danke
ungefähr so:
select *
from abc
where wörteranzahl(spalte xy)>20
Oracle stellt keine Funktion zur Verfügung, die die Wörter in einem Textstring sucht… muss man also selbst in PL/SQL programmieren - hab ich mal schnell für dich gemacht:
CREATE OR REPLACE
FUNCTION WORDCOUNT (
i\_String IN VARCHAR2
) RETURN NUMBER
IS
v\_pos NUMBER;
v\_InWhiteSpace BOOLEAN := TRUE;
v\_wordcount NUMBER := 0;
BEGIN
------------------------------------------------------------------------------
-- MODUL : WORDCOUNT
-- AUTOR : Bernhard Schaefers
-- BESCHR: Zählt Wörter in einem String. Worttrenner sind: Blank, Komma,
-- Semikolon, Punkt, Fragezeichen, Bindestrich, Tab, cr, nl
-- RETURN: Anzahl Wörter
------------------------------------------------------------------------------
IF i\_String IS NULL THEN
RETURN 0;
END IF;
FOR v\_pos IN 1 .. LENGTH (i\_String) LOOP
IF SUBSTR (i\_String, v\_pos, 1) IN (' ', ',', ';', '.', '?', '-',
CHR(9) /\* tab \*/, CHR(13) /\* cr \*/, CHR(10) /\* nl \*/)
THEN
v\_InWhiteSpace := TRUE;
ELSIF v\_InWhiteSpace THEN
v\_InWhiteSpace := FALSE;
v\_wordcount := v\_wordcount + 1;
END IF;
END LOOP;
RETURN v\_wordcount;
END WORDCOUNT;
/
Diesen Code mit cut&paste in SQL*Plus fallen lassen, dann kann man die Funktion testen:
SELECT WORDCOUNT ('seppel ist doof') FROM DUAL;
SELECT WORDCOUNT ('seppel ist doof wie heu') FROM DUAL;
Bei der Funktion habe ich alle Worttrenner mit aufgenommen, die mir so spontan eingefallen sind - bei Bedarf ergänzen. Noch ein Hinweis: Ein Abfrage der Art
select \*
from abc
where WORDCOUNT (spalte\_xy) \> 20
ist nicht performant, da die Funktion WORDCOUNT für jedes Tupel ausgeführt werden muss. Ab Oracle8 gibt jedoch function based indexes, damit lässt sich auch dieses Problem in den Griff kriegen