Received: from localhost (unknown [200.46.208.211]) by mail.postgresql.org (Postfix) with ESMTP id 467E6635236 for ; Mon, 27 Apr 2009 16:12:09 -0300 (ADT) Received: from mail.postgresql.org ([200.46.204.86]) by localhost (mx1.hub.org [200.46.208.211]) (amavisd-maia, port 10024) with ESMTP id 80352-04-6 for ; Mon, 27 Apr 2009 16:12:03 -0300 (ADT) X-Greylist: from auto-whitelisted by SQLgrey-1.7.6 Received: from mail.gmx.com (mail.gmx.com [213.165.64.42]) by mail.postgresql.org (Postfix) with SMTP id DF36D63421C for ; Mon, 27 Apr 2009 16:12:03 -0300 (ADT) Received: (qmail invoked by alias); 27 Apr 2009 19:12:01 -0000 Received: from 93-103-130-13.static.t-2.net (EHLO 93-103-130-13.static.t-2.net) [93.103.130.13] by mail.gmx.com (mp-eu002) with SMTP; 27 Apr 2009 21:12:01 +0200 X-Authenticated: #55513569 X-Provags-ID: V01U2FsdGVkX1+EBmYZFF6E0trD+T/xXwn516yJG9kyc95MfwhHUI kn16ggB1W8cTNT From: Jure Kobal To: pgsql-sql@postgresql.org Subject: Re: Query with Parameters and Wildcards Date: Mon, 27 Apr 2009 21:11:59 +0200 User-Agent: KMail/1.9.9 References: <23248274.post@talk.nabble.com> <200904271829.26557.j.kobal@gmx.com> <23260790.post@talk.nabble.com> In-Reply-To: <23260790.post@talk.nabble.com> MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit Content-Disposition: inline Message-Id: <200904272111.59693.j.kobal@gmx.com> X-Y-GMX-Trusted: 0 X-FuHaFi: 0.5 X-Virus-Scanned: Maia Mailguard 1.0.1 X-Spam-Status: No, hits=0 tagged_above=0 required=5 tests=none X-Spam-Level: X-Archive-Number: 200904/128 X-Sequence-Number: 32474 Hope I got your question right and I will somehow manage to explain it in a simple way. SELECT * FROM lanemanger.customers WHERE (customerfirstname ILIKE $1 || '%') Here you use $1 which is the position parameter in the function. So if you create the function as CREATE FUNCTION test(par1 varchar, par2 varchar) then $1 represents the first parameter and $2 the second one. You can't use position parameters outside of functions. For your needs a normal query would do it. The query that's send to the server would need to look something like this: SELECT * FROM lanemanger.customers WHERE (customerfirstname ILIKE 'lastname' || '%') lastname would be the one you're searching for. Now I have a question about your original query: SELECT * FROM Customers WHERE FirstName LIKE @custfirst + '%'; As much as I know @ in mssql is used only inside of procedures and since you're using C# isn't @custfirst in the end a C# variable and has nothing to do with the sql server? If I'm right with that then wouldn't the query for postgres look like: SELECT * FROM Customers WHERE FirstName ILIKE (@custfirst || '%'); Could be you will have to enclose the @custfirst in single quotas to make it work but how to do it right depends on the programming language you use. Regards, Jure On Monday 27 of April 2009 19:11:09 landsharkdaddy wrote: > That is it! It works just fine and from my Typed Dataset in c# I just call > the function using SELECT * FROM > lanemanager.GetCustomerByLastName(:customerlastname) and it works > perfectly. Through this whole process I have also gained a greater > understanding of using Functions as well. I guess I would like to know why > > SELECT * FROM lanemanger.customers WHERE (customerfirstname ILIKE $1 || > '%') > > doesnt work when used as the select query of the dataset. Using functions > is just as well but I would like to understand why the query doesnt work > unless it is called from a function. Thanks to all that helped with this > one, you have been very helpful. > > Jure Kobal wrote: > > In the original select you missed a small part. The operation || needs a > > value > > on every side and you missed the value on the left side. You had it as: > > WHERE > > (customerlastname ILIKE || '%') instead of WHERE (customerlastname > > ILIKE 'lastname' || '%'). And that is the reason for the error you got. > > > > The function from dayat has a small mistake. It should be: > > CREATE OR REPLACE FUNCTION TEST(lastname VARCHAR) > > else it will result in an error because of the missing space. > > > > On Monday 27 of April 2009 16:47:40 dayat wrote: > >> Do you run this code in the function? If so, the following example > >> function > >> with LANGUAGE SQL function: > >> > >> CREATE OR REPLACE FUNCTION TEST(lastnameVARCHAR) > >> RETURNS SETOF lanemanager.customers > >> AS $$ > >> SELECT customercellphone, customercity, customerdatecreated, > >> customerdatelastmodified, customeremail, customerfax, customerfirstname, > >> customerid, customerlastname, customermiddleinitial, customerphone, > >> customerreferredby, customerstateabbr, customerstreet1, customerstreet2, > >> customersuffix, customertitle, customerworkphone, customerworkphoneext, > >> customerzip FROM lanemanager.customers WHERE (customerlastname ILIKE $1 > >> > >> '%') > >> $$ > >> LANGUAGE SQL; > >> > >> Please tell me is it work for you. > >> > >> Regards > >> Hidayat > >> > >> ----- Original Message ----- > >> From: "landsharkdaddy" > >> To: > >> Sent: Monday, April 27, 2009 9:19 PM > >> Subject: Re: [SQL] Query with Parameters and Wildcards > >> > >> > When I try the following like you suggested I get an error that says > >> > "operator does not exist: || unknown > >> > > >> > > >> > > >> > SELECT customercellphone, customercity, customerdatecreated, > >> > customerdatelastmodified, customeremail, customerfax, > >> > >> customerfirstname, > >> > >> > customerid, customerlastname, customermiddleinitial, customerphone, > >> > customerreferredby, customerstateabbr, customerstreet1, > >> > >> customerstreet2, > >> > >> > customersuffix, customertitle, customerworkphone, > >> > customerworkphoneext, customerzip FROM lanemanager.customers WHERE > >> > (customerlastname ILIKE || '%') > >> > > >> > landsharkdaddy wrote: > >> >> I have a query that works on SQL Server to return customers that > >> > >> contain > >> > >> >> the string entered by the user by accepting parameters and using the > >> >> LIKE keyword. I would like to move this to postgreSQL but I'm just > >> >> not sure how > >> >> to get it done. This is the query > >> >> > >> >> SELECT * FROM Customers WHERE FirstName LIKE @custfirst + '%'; > >> >> > >> >> This works great on SQL Server but not on postgreSQL. Any help would > >> > >> be > >> > >> >> appreciated. > >> > >> __________________________________________________ > >> Apakah Anda Yahoo!? > >> Lelah menerima spam? Surat Yahoo! memiliki perlindungan terbaik > >> terhadap spam http://id.mail.yahoo.com > > > > -- > > Sent via pgsql-sql mailing list (pgsql-sql@postgresql.org) > > To make changes to your subscription: > > http://www.postgresql.org/mailpref/pgsql-sql > > -- > View this message in context: > http://www.nabble.com/Query-with-Parameters-and-Wildcards-tp23248274p232607 >90.html Sent from the PostgreSQL - sql mailing list archive at Nabble.com.