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

gue*_*rda 155 sql comparison

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

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

sou*_*rge 182

LIKE并且相等运算符具有不同的目的,它们不会做同样的事情:
=更快,而LIKE可以解释通配符.=尽可能在任何地方使用LIKE.

SELECT * FROM user WHERE login LIKE 'Test%';
Run Code Online (Sandbox Code Playgroud)

样本匹配:

TestUser1
TestUser2
TestU
测试


Tec*_*ddy 120

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

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
Run Code Online (Sandbox Code Playgroud)

将字符串与'='进行比较要快得多.

  • Woops ...好吧,我接受了这一点.表有~600个条目,10位数作为比较字段:等于快20到30倍! (5认同)

小智 35

在我的小经验中:

精确匹配的"=".

部分匹配"喜欢".

  • =不区分大小写 (4认同)

Cei*_*ish 14

Postgres为字符串匹配提供了一些其他技巧(如果这恰好是您的数据库):

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

select * from people where name ilike 'JOHN'
Run Code Online (Sandbox Code Playgroud)

火柴:

  • 约翰
  • 约翰
  • 约翰

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

select * from people where name ~ 'John.*'
Run Code Online (Sandbox Code Playgroud)

火柴:

  • 约翰
  • 乔纳森
  • 约翰尼


小智 9

就像抬头一样,'='运算符将在Transact-SQL中用空格填充字符串.所以'abc' = 'abc '会回归真实; 'abc' LIKE 'abc '将返回false.在大多数情况下,'='将是正确的,但在我最近的一个案例中,它不是.

因此,虽然'='更快,但LIKE可能会更明确地表明您的意图.

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


Tec*_*ddy 7

对于模式匹配,使用LIKE.完全匹配=.


Meh*_*ari 6

LIKE用于模式匹配,=用于相等性测试(由COLLATION使用中定义).

=可以使用索引,而LIKE查询通常需要测试结果集中的每个记录来过滤它(除非您使用全文搜索),因此=具有更好的性能.