You can just concatenate the placeholder, like so:
where b ~* ( E'.{2,4}' || ? )
(here is the test I did:)
sub re { # $sql = "SELECT a FROM table WHERE b ~* '.{2,4}?' "; # $sth = $dbh->prepare($sql); # $sth->execute($placeholder); my ($dbh) = @_; $dbh->do("set search_path to public"); # $dbh->do("drop table if exists regexjunk;"); -- uncomment if +needed $dbh->do("create table regexjunk (a text,b text);"); $dbh->do(" -- insert 4 rows: insert into regexjunk (a,b) values ('one' , 'FOXxxxxxx') , ('two' , 'xxxxFOXxx') , ('three', 'xFOXxxxxx') , ('four' , 'xxxxxFOXx') ; "); my $sql = "SELECT a FROM regexjunk WHERE b ~* ( E'.{2,4}' || ? + ) "; my $sth = $dbh->prepare($sql); my $placeholder = 'FOX'; $sth->execute($placeholder); while (my $rrow = $sth->fetchrow_arrayref) { print $rrow->[0], "\n"; } -- yields 'two' and 'four' ... }
In reply to Re: dbi, placeholder and postgres regular expression problem
by erix
in thread dbi, placeholder and postgres regular expression problem
by zdzieblo
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |