[SQL] = or LIKE ?

2009-02-15 Thread Jesper Krogh

Hi.

Can anyone explain me this behavior?

testdb=# select E'\\' = E'\\';
 ?column?
--
 t
(1 row)

testdb=# select E'\\' like E'\\';
 ?column?
--
 f
(1 row)


Shouldnt the like operator do the same as the = if there occours no 
wildcards and stuff in the string?


--
Jesper

--
Sent via pgsql-sql mailing list ([email protected])
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-sql


Re: [SQL] = or LIKE ?

2009-02-15 Thread Tom Lane
Jesper Krogh  writes:
> Shouldnt the like operator do the same as the = if there occours no 
> wildcards and stuff in the string?

If there are also no escape characters, then yeah.

FWIW, 8.4 will complain about this case:

regression=# select E'\\' like E'\\';
ERROR:  LIKE pattern must not end with escape character

regards, tom lane

-- 
Sent via pgsql-sql mailing list ([email protected])
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-sql


Re: [SQL] = or LIKE ?

2009-02-15 Thread Jesper Krogh

Tom Lane wrote:

Jesper Krogh  writes:
Shouldnt the like operator do the same as the = if there occours no 
wildcards and stuff in the string?


If there are also no escape characters, then yeah.

FWIW, 8.4 will complain about this case:

regression=# select E'\\' like E'\\';
ERROR:  LIKE pattern must not end with escape character


So I cannot rely on the like operator to behave correct if I'd like to 
compare strings with backslashes (e.g. filepaths from MS Windows 
filesystems)?


I actually get the same if it doesnt end with the slashes:
testdb=# select E'\\t' like E'\\t';
 ?column?
--
 f
(1 row)

testdb=# select E'\\t' = E'\\t';
 ?column?
--
 t
(1 row)



--
Jesper

--
Sent via pgsql-sql mailing list ([email protected])
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-sql


Re: [SQL] = or LIKE ?

2009-02-15 Thread Jesper Krogh

Jesper Krogh wrote:

Tom Lane wrote:

Jesper Krogh  writes:
Shouldnt the like operator do the same as the = if there occours no 
wildcards and stuff in the string?


If there are also no escape characters, then yeah.

FWIW, 8.4 will complain about this case:

regression=# select E'\\' like E'\\';
ERROR:  LIKE pattern must not end with escape character


So I cannot rely on the like operator to behave correct if I'd like to 
compare strings with backslashes (e.g. filepaths from MS Windows 
filesystems)?


I actually get the same if it doesnt end with the slashes:
testdb=# select E'\\t' like E'\\t';
 ?column?
--
 f
(1 row)

testdb=# select E'\\t' = E'\\t';
 ?column?
--
 t
(1 row)


Ok. The pattern has to be "double escaped"..

testdb=# select E'\\t' like E't';
 ?column?
--
 t
(1 row)


(for the archives a ref to the documentations i didnt get by the read 
through)

http://www.postgresql.org/docs/8.2/static/functions-matching.html#FUNCTIONS-LIKE

--
Jesper


--
Sent via pgsql-sql mailing list ([email protected])
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-sql


Re: [SQL] = or LIKE ?

2009-02-15 Thread Tom Lane
Jesper Krogh  writes:
> Ok. The pattern has to be "double escaped"..

Or specify a different escape character.

regards, tom lane

-- 
Sent via pgsql-sql mailing list ([email protected])
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-sql


Re: [SQL] = or LIKE ?

2009-02-15 Thread Craig Ringer

Jesper Krogh wrote:

So I cannot rely on the like operator to behave correct if I'd like to 
compare strings with backslashes (e.g. filepaths from MS Windows 
filesystems)?


test=# SELECT E'\\' LIKE E'\\' ESCAPE '';
 ?column?
--
 t
(1 row)

--
Craig Ringer

--
Sent via pgsql-sql mailing list ([email protected])
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-sql