Re: select * from test where name like 'co_%'

Started by sivapostgres@yahoo.comabout 6 years ago4 messagesgeneral
Jump to latest
#1sivapostgres@yahoo.com
sivapostgres@yahoo.com

Hello,
What returns when I run a query like this;
Select * from test where name like 'co_%';
I expect anything that starts with 'co_' and NOT 'co' only.  Am I right?  But I get every names that starts with 'co'. Why ?
Happiness Always
BKR Sivaprakash

#2Kenneth Marshall
ktm@rice.edu
In reply to: sivapostgres@yahoo.com (#1)
Re: select * from test where name like 'co_%'

On Tue, Mar 10, 2020 at 12:49:01PM +0000, sivapostgres@yahoo.com wrote:

Hello,
What returns when I run a query like this;
Select * from test where name like 'co_%';
I expect anything that starts with 'co_' and NOT 'co' only.� Am I right?� But I get every names that starts with 'co'. Why ?
Happiness Always
BKR Sivaprakash

Hi,

Check out the documentation:

https://www.postgresql.org/docs/12/functions-matching.html#FUNCTIONS-LIKE

You have 2 meta characters there. The '_' matches any character also.

Regards,
Ken

#3Paul Förster
paul.foerster@gmail.com
In reply to: sivapostgres@yahoo.com (#1)
Re: select * from test where name like 'co_%'

Hi,

an underscore matches a single character, any character. You'd have to
escape it and tell the query what the escape character is if you want
it to be treated as a standard character:

db=# create table t(t text);
CREATE TABLE
db=# insert into t(t) values ('fox'), ('fo_'), ('fo_x');
INSERT 0 3
db=# select * from t;
t
------
fox
fo_
fo_x
(3 rows)

db=# select * from t where t like 'fo_%';
t
------
fox
fo_
fo_x
(3 rows)

db=# select * from t where t like 'fo\_%' escape '\';
t
------
fo_
fo_x
(2 rows)

Cheers,
Paul

On Tue, Mar 10, 2020 at 1:49 PM sivapostgres@yahoo.com
<sivapostgres@yahoo.com> wrote:

Show quoted text

Hello,

What returns when I run a query like this;

Select * from test where name like 'co_%';

I expect anything that starts with 'co_' and NOT 'co' only. Am I right? But I get every names that starts with 'co'. Why ?

Happiness Always
BKR Sivaprakash

#4sivapostgres@yahoo.com
sivapostgres@yahoo.com
In reply to: Paul Förster (#3)
Re: select * from test where name like 'co_%'

Thanks.  Got it.
On Tuesday, 10 March, 2020, 06:30:27 pm IST, Paul Foerster <paul.foerster@gmail.com> wrote:

Hi,

an underscore matches a single character, any character. You'd have to
escape it and tell the query what the escape character is if you want
it to be treated as a standard character:

db=# create table t(t text);
CREATE TABLE
db=# insert into t(t) values ('fox'), ('fo_'), ('fo_x');
INSERT 0 3
db=# select * from t;
  t
------
fox
fo_
fo_x
(3 rows)

db=# select * from t where t like 'fo_%';
  t
------
fox
fo_
fo_x
(3 rows)

db=# select * from t where t like 'fo\_%' escape '\';
  t
------
fo_
fo_x
(2 rows)

Cheers,
Paul

On Tue, Mar 10, 2020 at 1:49 PM sivapostgres@yahoo.com
<sivapostgres@yahoo.com> wrote:

Show quoted text

Hello,

What returns when I run a query like this;

Select * from test where name like 'co_%';

I expect anything that starts with 'co_' and NOT 'co' only.  Am I right?  But I get every names that starts with 'co'. Why ?

Happiness Always
BKR Sivaprakash