In Firebird zumindest seit der 2.x ' er Version kann man die meisten UDF' s durch SP' s ersetzen.
Code:
create or alter procedure nur_ziffern (
wert varchar(80)
returns (
result varchar(80))
as
declare variable laenge smallint$;
declare variable pos smallint$;
declare variable zeichen char1$;
begin
laenge = char_length(:wert);
if (:laenge > 0) then
begin
pos = 1;
while (:pos <= :laenge) do
begin
zeichen = substring(:wert from :pos for 1);
if (:zeichen in ('0','1','2','3','4','5','6','7','8','9')) then
result = coalesce(:result, '')||:zeichen;
pos = :pos + 1;
end
end
suspend;
end
Ich führe immer ein Feld mit (Bsp. nummer$, welches nur die Ziffern enthält.
Dieses wird über einen Trigger aktuell gehalten:
Code:
CREATE OR ALTER TRIGGER TELEFON_BUI1 FOR TELEFON
ACTIVE BEFORE INSERT OR UPDATE POSITION 1
as
begin
execute procedure nur_ziffern(new.nummer) returning_values new.nummer$;
end
Das Feld ist indexiert und wird für die Suche benutzt.
Frank