Re: Help: Using a regular expression match as a value

From: "tjk(at)tksoft(dot)com" <tjk(at)tksoft(dot)com>
To: radevenz(at)ix(dot)netcom(dot)com (Richard DeVenezia)
Cc: pgsql-sql(at)postgresql(dot)org
Subject: Re: Help: Using a regular expression match as a value
Date: 2000-10-24 10:47:26
Message-ID: 200010241047.DAA13735@uno.tksoft.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-sql

Richard,

Please correct me if I am wrong.

You want to do something like:

select $1 from captives where firstname ~ '^(R[^ \t,]*d)$';

And get as result:
lastname
Richard
Richard
Richard
Ricard
Richard
Rolland
Richard

In this case, the above query is same as:
select firstname from captives where firstname ~ '^R[^ \t,]*d$';

If the firstname field contains entries like "Richard, Elvis" and "Richard Amadeus,"
then you want something like:
select $1 from captives where firstname ~ '^(R[^ \t,]*d)[ \t,]';
which would return the first name in the field but not subsequent
names.
I am afraid there is no built in solution to get around these scenarios.
You could do:
select substring(firstname from 1 for (position(' ' in firstname)-1))
from captives where firstname ~ '^R[^ ]*d ' union select firstname
from captives where firstname ~ '^R[^ ]*d$';

This would get you what you wanted, for this one scenario.

I know it's not what you hoped, but you might be able to
make do with this.

Troy

>
> I am just getting started with pgsql and have read available docs I can
> find.
>
> I know I can match a row in a where clause using a regular expression.
>
> How can I use what was regexp matched (e.g. perl $1,$2, etc...) as a column
> assignment ?
>
> I'm looking for something like this?
> select ...
> ...
> $1 of firstname, /^R.*d/ as name_starts_with_r_and_ends_with_d
> ...
>
> TIA
>
> Richard DeVenezia
>
>

In response to

Browse pgsql-sql by date

  From Date Subject
Next Message Craig May 2000-10-24 13:21:08 Like Query on BLOB's
Previous Message Craig May 2000-10-24 10:37:42 Postgresql Site Search