in reply to dbi, placeholder and postgres regular expression problem

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' ... }

Replies are listed 'Best First'.
Re^2: dbi, placeholder and postgres regular expression problem
by zdzieblo (Acolyte) on May 09, 2008 at 00:12 UTC
    great, thank you... what is the purpose of that 'E' before regexp string? i assume it makes postgres treat it as a regular expression rather than as a normal string...