|
Graham Dumpleton
grahamd at dscpl.com.au
Thu Jan 26 19:47:54 EST 2006
Luis M. Gonzalez wrote ..
> Thanks Graham, but no, this is not what I want to do...
> I'll try to explain it better:
>
> Lets say that I want to return a list of companies whose names include
> the
> word "Co" ("Co" is pased as a parameter to the query), so I can get:
>
> Acme Corporation Ltd.
> Barnes Corp. Inc.
> Corporative Management S.A.
> Fresh Corpse Foods, Ltd.
> etc, etc...
>
> So, how should I include this parameter into the LIKE clause.
> I guess it should be enclosed between "%" and "%", but what should I put
> in
> between?
Ultimately you use the substring of string you are looking for.
Quoting from a Google search, as that way it looks authoritative:
The LIKE pattern matching operator can also be used in the conditional selection
of the where clause. Like is a very powerful operator that allows you to select
only rows that are "like" what you specify. The percent sign "%" can be used as
a wild card to match any possible character that might appear before or after the
characters specified. For example:
select first, last, city
from empinfo
where first LIKE 'Er%';
What you were doing is basically correct, although you were missing single quotes.
The real issue as I pointed out was that because you were using '%' operator to
compose the string, you need to have "%%" in the string where you want a real '%'.
Adding the missing quotes:
"select * from customers where company like '%%%s%%'" % "Co"
Which yields an actual SQL string of:
"select * from customers where company like '%Co%'"
BTW, if the substring you want to search for is coming from a web page or other
user input this could be dangerous. For example, they could include a single quote
in the substring for searching and stuff it all up. Thus, you need to perform
appropriate escaping to avoid such problems.
Graham
> ----- Original Message -----
> From: "Graham Dumpleton" <grahamd at dscpl.com.au>
> To: "Luis M. Gonzalez" <luismg at gmx.net>
> Cc: <mod_python at modpython.org>
> Sent: Thursday, January 26, 2006 8:46 PM
> Subject: Re: [mod_python] String format in "LIKE" clause
>
>
> > Luis M. Gonzalez wrote ..
> >> I tried this:
> >> ("select * from customers where company like %s%" %company ) # doesn't
> >> work
> >> ("select * from customers where company like '%(%s)%" %company #
> >> doesn't
> >> work either
> >>
> >> The question is:
> >> How should a include the parameter into de LIKE clause in order to accept
> >> only a part of the full company name and return the matching results?
> >
> > Double up the"%" to get an actual percentage passed through.
> >
> > ("select * from customers where company like %s%%" %company )
> >
> > At least that would be the problem if it is simply using "%" operator
> on
> > string:
> >
> >>>> "select * from customers where company like %s%" % "ME"
> > Traceback (most recent call last):
> > File "<stdin>", line 1, in ?
> > ValueError: incomplete format
> >
> >>>> "select * from customers where company like %s%%" % "ME"
> > 'select * from customers where company like ME%'
> >
> > Graham
> >
|