Hi!
There's the (almost religious) discussion, if you should use LIKE or '=' to compare strings in SQL statements.
- Are there reasons to use LIKE?
- Are there reasons to use '='?
- Performance? Readability?
Thanks in advance!
Hi!
There's the (almost religious) discussion, if you should use LIKE or '=' to compare strings in SQL statements.
Thanks in advance!
LIKE does matching like wildcards char [*, ?] at the shell
LIKE '%suffix' - give me everything that ends with suffix. You couldn't do that with =
Depends on the case actually.
In my small experience:
"=" for Exact Matches.
"LIKE" for Partial Matches.
LIKE
and the equality operator have different purposes, they don't do the same thing:
=
is much faster, whereas LIKE
can interpret wildcards. Use =
wherever you can and LIKE
wherever you must.
SELECT * FROM user WHERE login LIKE 'Test%';
-- Matches
-- TestUser1
-- TestUser2
-- TestU
-- Test
-- etc.
LIKE
is used for pattern matching and =
is used for equality test (as defined by the COLLATION
in use).
=
can use indexes while LIKE
queries usually require testing every single record in the result set to filter it out (unless you are using full text search) so =
has better performance.
To see the performance difference, try this:
SELECT count(*)
FROM master..sysobjects as A
JOIN tempdb..sysobjects as B
on A.name = B.name
SELECT count(*)
FROM master..sysobjects as A
JOIN tempdb..sysobjects as B
on A.name LIKE B.name
There's a couple of other tricks that Postgres offers for string matching (if that happens to be your DB):
ILIKE, which is a case insensitive LIKE match:
select * from people where name ilike 'JOHN'
Matches:
And if you want to get really mad you can use regular expressions:
select * from people where name ~ 'John.*'
Matches: