Thread: BUG #7835: The _ acts like a wildcard when used as '%_%'

BUG #7835: The _ acts like a wildcard when used as '%_%'

From
elliott.groszek@navy.mil
Date:
The following bug has been logged on the website:

Bug reference:      7835
Logged by:          Elliott Groszek
Email address:      elliott.groszek@navy.mil
PostgreSQL version: 9.0.11
Operating system:   Linux
Description:        =


Using the _ (underscore) in a wildcard query accesses values with - (dash)
as well.  This results in unexpected behaviors when some data values contain
the underscore and some data values contain the dash.

Re: BUG #7835: The _ acts like a wildcard when used as '%_%'

From
Jaime Casanova
Date:
On Tue, Jan 29, 2013 at 12:20 PM,  <elliott.groszek@navy.mil> wrote:
> The following bug has been logged on the website:
>
> Bug reference:      7835
> Logged by:          Elliott Groszek
> Email address:      elliott.groszek@navy.mil
> PostgreSQL version: 9.0.11
> Operating system:   Linux
> Description:
>
> Using the _ (underscore) in a wildcard query accesses values with - (dash=
)
> as well.  This results in unexpected behaviors when some data values cont=
ain
> the underscore and some data values contain the dash.
>

i guess you are using a LIKE expression. And in like both % and _ are
wildcards, as documented in:
http://www.postgresql.org/docs/9.2/static/functions-matching.html#FUNCTIONS=
-LIKE
And AFAIU, mandated by SQL Standard

"An underscore (_) in pattern stands for (matches) any single
character; a percent sign (%) matches any sequence of zero or more
characters."

if you only want to show those that contains an underscore (supressing
its wildcard behaviour) you need to use a escape character:

col LIKE '%\_%'

--
Jaime Casanova         www.2ndQuadrant.com
Professional PostgreSQL: Soporte 24x7 y capacitaci=F3n
Phone: +593 4 5107566         Cell: +593 987171157