在SQL语句中比较字符串时,有一种(几乎是宗教性的)讨论,应该使用LIKE还是“=”。
- 使用LIKE的理由是什么?
- 使用“=”的理由是什么?
- 性能?可读性?
在SQL语句中比较字符串时,有一种(几乎是宗教性的)讨论,应该使用LIKE还是“=”。
LIKE
和等号运算符有不同的用途,它们并不做相同的事情:
=
要快得多,而LIKE
可以解释通配符。在您可以使用=
的地方,请使用它,在必须使用LIKE
的地方请使用它。
SELECT * FROM user WHERE login LIKE 'Test%';
示例匹配:
测试用户1
测试用户2
测U
测
想要查看性能差异,请尝试以下操作:
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" 表示部分匹配。
如果你使用的是Postgres数据库,还有一些其他的字符串匹配技巧可供使用:
ILIKE是一个大小写不敏感的LIKE匹配:
select * from people where name ilike 'JOHN'
匹配结果:
如果您想要真的生气,您可以使用正则表达式:
select * from people where name ~ 'John.*'
匹配:
提醒一下,在Transact-SQL中,'='操作符会在字符串中填充空格。因此,'abc' = 'abc '
将返回true;'abc' LIKE 'abc '
将返回false。在大多数情况下,'='是正确的选择,但在我最近的一个案例中并非如此。
因此,虽然'='更快,但LIKE可能更明确地表达您的意图。
在模式匹配时使用 LIKE,精确匹配时使用 =。
LIKE
用于模式匹配,=
用于相等性测试(由正在使用的COLLATION
定义)。
=
可以使用索引,而LIKE
查询通常需要测试结果集中的每个记录以过滤它(除非您使用全文搜索),因此=
具有更好的性能。
LIKE是匹配通配符字符[*,?]的shell,
LIKE'%suffix' - 给我所有以suffix结尾的内容。你不能用=做到这一点。
实际情况取决于具体情况。
即使性能较慢,使用“like”的另一个原因是:当比较时,字符值会隐式转换为整数,因此:
declare @transid varchar(15)
if @transid != 0
将会给您一个“varchar值'123456789012345'的转换溢出了int列”的错误。