Обсуждение: Problem with LIKE in a SQL function
Hello,
    I have a bit of a problem, I have looked on the archives and didn't manage
to see anything.
I am trying to write the below function
mail_db=# CREATE FUNCTION "user_id_funct_p2"(varchar)
mail_db-# RETURNS setof varchar AS '
mail_db'# SELECT "mailbox" FROM "user" WHERE "mailbox" LIKE (\'$1%\') '
mail_db-# LANGUAGE sql ;
CREATE
mail_db=# select user_id_funct_p2('test');
 user_id_funct_p2
------------------
(0 rows)
If I  do
  SELECT "mailbox" FROM "user" WHERE "mailbox" LIKE ('test%') ;
It does returns the following results
 mailbox
----------
 test0001
 test0002
 test0003
 test0004
 test0005
 test0006
(6 rows)
If I ammed the function to return $1 it does return as test.  When I looked @
the debug output it seemed to be matching $1 rather that the value of $1.
That leads me to believe that my character escape sequence is incorrect.  I
have tried every possible combination but I am still not returning valid
results.
Many thanks in advance
Mole
--
==============
Caroline Fletcher
Head of Systems
			
		Mole <mole@zebra.co.uk> writes:
> mail_db=# CREATE FUNCTION "user_id_funct_p2"(varchar)
> mail_db-# RETURNS setof varchar AS '
> mail_db'# SELECT "mailbox" FROM "user" WHERE "mailbox" LIKE (\'$1%\') '
> mail_db-# LANGUAGE sql ;
I think you want:
SELECT "mailbox" FROM "user" WHERE "mailbox" LIKE ($1 || \'%\') '
            regards, tom lane
			
		I think this does the trick.
CREATE FUNCTION user_id_funct_p2(VARCHAR) RETURNS setof varchar AS '
    SELECT mailbox FROM user WHERE mailbox LIKE (SELECT ($1 || \'%\'));
'LANGUAGE sql ;
-Garrett
---- This is what you wrote me ----
:Hello,
:    I have a bit of a problem, I have looked on the archives and didn't manage
:to see anything.
:
:I am trying to write the below function
:
:mail_db=# CREATE FUNCTION "user_id_funct_p2"(varchar)
:mail_db-# RETURNS setof varchar AS '
:mail_db'# SELECT "mailbox" FROM "user" WHERE "mailbox" LIKE (\'$1%\') '
:mail_db-# LANGUAGE sql ;
:CREATE
:
:mail_db=# select user_id_funct_p2('test');
: user_id_funct_p2
:------------------
:(0 rows)
:
:If I  do
:  SELECT "mailbox" FROM "user" WHERE "mailbox" LIKE ('test%') ;
:
:It does returns the following results
:
: mailbox
:----------
: test0001
: test0002
: test0003
: test0004
: test0005
: test0006
:(6 rows)
:
:If I ammed the function to return $1 it does return as test.  When I looked @
:the debug output it seemed to be matching $1 rather that the value of $1.
:That leads me to believe that my character escape sequence is incorrect.  I
:have tried every possible combination but I am still not returning valid
:results.
:
:Many thanks in advance
:
:Mole
:--
:==============
:Caroline Fletcher
:Head of Systems
:
:---------------------------(end of broadcast)---------------------------
:TIP 4: Don't 'kill -9' the postmaster
:
			
		Hi All, many thanks to Garret and Tom, that did the trick. "SELECT mailbox FROM user WHERE mailbox LIKE (SELECT ($1 || \'%\')); " Mole -- ============== Caroline Fletcher Head of Systems Zebrahosts