使用'='或LIKE比较SQL中的string?

如果您应该使用LIKE或“=”来比较SQL语句中的string,那么就有(几乎是宗教的)讨论。

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

提前致谢!

要查看性能差异,请尝试以下操作:

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 

用'='比较string要快得多。

LIKE和平等运算符有不同的目的,它们不做同样的事情: =更快,而LIKE可以解释通配符。 使用=任何你可以和LIKE地方,只要你必须。

 SELECT * FROM user WHERE login LIKE 'Test%'; -- Matches -- TestUser1 -- TestUser2 -- TestU -- Test -- etc. 

以我的小经验:

“=”完全匹配。

“喜欢”部分匹配。

Postgres为string匹配提供了其他一些技巧(如果碰巧是你的数据库):

ILIKE,这是不区分大小写的LIKE匹配:

 select * from people where name ilike 'JOHN' 

火柴:

  • 约翰
  • 约翰
  • 约翰

如果你想变得疯狂,你可以使用正则expression式:

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

火柴:

  • 约翰
  • 乔纳森
  • 约翰尼

就像头一回,'='操作符将在Transact-SQL中填充带空格的string。 所以'abc' = 'abc '会返回true; 'abc' LIKE 'abc '将返回false。 在大多数情况下,'='将是正确的,但在最近的情况下,它不是。

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

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

对于模式匹配使用LIKE。 精确匹配=。

LIKE用于模式匹配, =用于相等性testing(由使用中的COLLATION定义)。

=可以使用索引,而LIKE查询通常需要testing结果集中的每个logging,以便将其过滤掉(除非使用全文search),因此=具有更好的性能。

LIKE在shell中做类似通配符char [*,?]的匹配
LIKE'%suffix' – 给我所有以后缀结尾的内容。 你不能用=来做
实际上取决于案件。

即使性能比较慢,使用“like”还有另一个原因:字符值在比较时被隐式转换为整数,所以:

声明@transid varchar(15)

如果@transid!= 0

会给你一个“varchar值的转换”123456789012345“溢出了一个int列”的错误。