在SQL语句中,是否应该使用LIKE或'='来比较字符串,这是一个(几乎是宗教式的)讨论。
有使用LIKE的理由吗? 有使用'='的理由吗? 性能?可读性呢?
在SQL语句中,是否应该使用LIKE或'='来比较字符串,这是一个(几乎是宗教式的)讨论。
有使用LIKE的理由吗? 有使用'='的理由吗? 性能?可读性呢?
当前回答
Postgres提供了一些其他的字符串匹配技巧(如果它恰好是你的DB):
ILIKE是一个不区分大小写的LIKE匹配:
select * from people where name ilike 'JOHN'
匹配:
约翰 约翰 约翰
如果你真的很生气,你可以使用正则表达式:
select * from people where name ~ 'John.*'
匹配:
约翰 Johnathon 约翰尼
其他回答
Postgres提供了一些其他的字符串匹配技巧(如果它恰好是你的DB):
ILIKE是一个不区分大小写的LIKE匹配:
select * from people where name ilike 'JOHN'
匹配:
约翰 约翰 约翰
如果你真的很生气,你可以使用正则表达式:
select * from people where name ~ 'John.*'
匹配:
约翰 Johnathon 约翰尼
要查看性能差异,请尝试以下方法:
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
用'='比较字符串要快得多。
在我的小经验中:
“=”表示精确匹配。
“LIKE”表示部分匹配。
作为提示,在Transact-SQL中,'='操作符将用空格填充字符串。因此'abc' = 'abc'将返回true;'abc' LIKE 'abc'将返回false。在大多数情况下,'='是正确的,但在我最近的一个案例中,它不是。
因此,虽然'='更快,但LIKE可能更明确地表达你的意图。
http://support.microsoft.com/kb/316626
对于模式匹配使用LIKE。对于精确匹配=。