使用'='或LIKE来比较SQL中的字符串?

时间:2009-02-05 08:35:04

标签: sql comparison

如果你应该使用LIKE或'='来比较SQL语句中的字符串,那就是(几乎是宗教的)讨论。

  • 是否有理由使用LIKE?
  • 是否有理由使用'='?
  • 性能?可读性?

9 个答案:

答案 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'

匹配

  • 约翰
  • 约翰
  • JOHN

如果你真的生气,你可以使用正则表达式:

select * from people where name ~ 'John.*'

匹配

  • 约翰
  • 乔纳森
  • 约翰尼

答案 4 :(得分:9)

就像抬头一样,' ='运算符将在Transact-SQL中使用空格填充字符串。所以'abc' = 'abc '将返回true; 'abc' LIKE 'abc '将返回false。在大多数情况下' ='这是正确的,但在我最近的一个案例中却没有。

所以,虽然' ='更快,LIKE可能更明确地陈述你的意图。

http://support.microsoft.com/kb/316626

答案 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列”错误。