使用'='或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可能会更明确地陈述你的意图。
对于模式匹配使用LIKE。 精确匹配=。
LIKE
用于模式匹配, =
用于相等性testing(由使用中的COLLATION
定义)。
=
可以使用索引,而LIKE
查询通常需要testing结果集中的每个logging,以便将其过滤掉(除非使用全文search),因此=
具有更好的性能。
LIKE在shell中做类似通配符char [*,?]的匹配
LIKE'%suffix' – 给我所有以后缀结尾的内容。 你不能用=来做
实际上取决于案件。
即使性能比较慢,使用“like”还有另一个原因:字符值在比较时被隐式转换为整数,所以:
声明@transid varchar(15)
如果@transid!= 0
会给你一个“varchar值的转换”123456789012345“溢出了一个int列”的错误。