如果你应该使用LIKE或'='来比较SQL语句中的字符串,那就是(几乎是宗教的)讨论。
答案 0 :(得分:177)
LIKE
和等值运算符有不同的用途,它们不做同样的事情:
=
要快得多,而LIKE
可以解释通配符。尽可能使用=
和LIKE
,无论您身在何处。
SELECT * FROM user WHERE login LIKE 'Test%';
示例匹配:
TestUser1
TestUser2
TESTU
测试
答案 1 :(得分:117)
要查看性能差异,请尝试以下操作:
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
将字符串与'='进行比较要快得多。
答案 2 :(得分:31)
在我的小经历中:
“=”表示完全匹配。
部分匹配“喜欢”。
答案 3 :(得分:11)
Postgres为字符串匹配提供了一些其他技巧(如果这恰好是您的数据库):
ILIKE,这是一个不区分大小写的LIKE匹配:
select * from people where name ilike 'JOHN'
匹配
如果你真的生气,你可以使用正则表达式:
select * from people where name ~ 'John.*'
匹配
答案 4 :(得分:9)
就像抬头一样,' ='运算符将在Transact-SQL中使用空格填充字符串。所以'abc' = 'abc '
将返回true; 'abc' LIKE 'abc '
将返回false。在大多数情况下' ='这是正确的,但在我最近的一个案例中却没有。
所以,虽然' ='更快,LIKE可能更明确地陈述你的意图。
答案 5 :(得分:7)
对于模式匹配,请使用LIKE。完全匹配=。
答案 6 :(得分:6)
LIKE
用于模式匹配,=
用于相等性测试(由使用中的COLLATION
定义)。
=
可以使用索引而LIKE
查询通常需要测试结果集中的每条记录来过滤掉它(除非您使用全文搜索),因此=
具有更好的性能
答案 7 :(得分:3)
LIKE在shell中匹配通配符char [*,?]
LIKE'%后缀' - 给我带有后缀的所有内容。你不能用=
做那件事
实际上取决于案件。
答案 8 :(得分:3)
即使性能较慢,使用“like”还有另一个原因:字符值在比较时会隐式转换为整数,因此:
声明@transid varchar(15)
如果@transid!= 0
会给你一个“转换varchar值'123456789012345'溢出一个int列”错误。