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

Help: Using a regular expression match as a value

From
"Richard DeVenezia"
Date:
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



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

From
"tjk@tksoft.com"
Date:
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
selectfirstname 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
> 
>