Re: RE: Re: select substr???
От | Albert REINER |
---|---|
Тема | Re: RE: Re: select substr??? |
Дата | |
Msg-id | 20010412174337.B253@frithjof обсуждение исходный текст |
Ответ на | RE: Re: select substr??? (Jeff Eckermann <jeckermann@verio.net>) |
Список | pgsql-sql |
Thanks, interesting. I did not find any mention of regular expressions in the 7.0.2 docs I installed locally. BTW, your code does not do exactly the same, as it removes any whitespace while the other one only collapses consecutive blanks. But, of course, regular expressions in PL/pgSQL make this much easier. As a further aside, I think that in both versions of the function the check for `$1 IS NULL' is not necessary; I got the impression that passing NULL as an argument to a function will automatically return NULL as the result, doesn't it? Albert. On Tue, Apr 10, 2001 at 05:41:26PM -0500, Jeff Eckermann wrote: > Regular expressions make this much easier. The below could be shortened to: > > create function ComparisonString(text) returns text as ' > declare > t alias for $1; > r text; > c char; > begin > if t is null or t !~ ''[^a-zA-Z0-9]'' > then > return t; > end if; > r = ''''; > for i in 1 .. char_length(t) loop > c = substring(t from i for 1); > if c ~ ''[a-zA-Z0-9]'' > then > r = r || c; > end if; > end loop; > return r; > end; > ' language 'plpgsql' with (IsCachable); > > > -----Original Message----- > > From: Albert REINER [SMTP:areiner@tph.tuwien.ac.at] ... > > > > somewhere I use the following, which might be adapted to do what you > > want. I am sure there are more elegant ways of doing this, though. > > > > create function ComparisonString(text) returns text as ' > > declare > > t text; > > r text; > > c char; > > ns bool; > > begin > > if $1 is null then > > return NULL; > > end if; > > t = lower(trim(both $1)); > > r = ''''; > > ns = false; > > for i in 1 .. char_length(t) loop > > c = substring(t from i for 1); > > if c = '' '' then > > if ns then > > r = r || '' ''; > > end if; > > ns = false; > > else > > if position(c in ''abcdefghijklmnopqrstuvwxyz0123456789'') > 0 > > then > > r = r || c; > > ns = true; > > end if; > > end if; > > end loop; > > return trim(both r); > > end; > > ' language 'plpgsql' with (IsCachable); > >
В списке pgsql-sql по дате отправления: