SQL LIKE没有与'='相同的通配符?

jav*_*y79 39 sql wildcard sql-like

我知道这是一个非常基本的问题,我我知道答案......但我想证实.

这些查询真的相同吗?

SELECT * FROM FOO WHERE BAR LIKE 'X'
SELECT * FROM FOO WHERE BAR ='X'
Run Code Online (Sandbox Code Playgroud)

也许在使用没有外卡的情况下会有性能开销?

我有一个可选择使用LIKE和外卡的应用程序.SP目前做类似的并附加外卡 - 我想只是更新查询使用,但让应用程序根据需要附加外卡.

CMS*_*CMS 26

正如@ocdecio所说,如果优化器足够智能,那么应该没有区别,但是如果你想确定幕后发生的事情,你应该比较两个查询的执行计划.

  • 这是错误的答案。LIKE 不仅存在性能开销,而且还存在逻辑差异。请参阅下面 CSharpie 的回答。 (2认同)

CSh*_*pie 13

Matt Whitfield的原始答案来自这里

=和之间有区别LIKE.使用时执行字符串比较时LIKE,模式字符串中的所有字符都很重要.这包括前导或尾随空格.

所以,如果你有一列,它是charnchar,而不是nvarchar或者varchar,会有不同的结果,由于尾随空格.

重现此行为的小示例:

CREATE TABLE #temp (nam [varchar](MAX))
INSERT INTO [#temp] ([nam])
VALUES ('hello')
INSERT INTO [#temp] ([nam])
VALUES ('hello  ')

SELECT * FROM #temp WHERE [nam] = 'hello  '

SELECT * FROM #temp WHERE [nam] LIKE 'hello  '
Run Code Online (Sandbox Code Playgroud)


Otá*_*cio 7

任何好的优化器都会将第一个表达式减少到第二个表达式.