SQL LIKE是否为所有数据库的有效语法?

时间:2017-02-27 16:40:20

标签: sql rdbms sql-like

我有一个简单的查询(实际查询会更复杂。它是一个动态查询)

SELECT * FROM Employee WHERE @firstName IS NULL OR firstName LIKE @firstName 

@firstName将作为

传递
  • NULL
  • '%名称%'

当@firstName作为'%name%'传递时。查询将正常工作。

当@firstName传递为NULL时。查询将是

SELECT * FROM Employee WHERE NULL IS NULL OR firstName LIKE NULL

// This query is valid syntax on MSSQL and return all employees
// because NULL IS NULL evaluated as TRUE
// And firstName LIKE NULL evaluated as FALSE -- I guess

我的问题是

firstName LIKE NULL 在所有SQL数据库上都有效吗?

它总是被评估为FALSE吗?

我检查了这个LIKE语法https://www.w3schools.com/SQl/sql_like.asp

https://msdn.microsoft.com/en-us/library/ms179859.aspx

但我没有找到答案。谢谢!

3 个答案:

答案 0 :(得分:2)

LIKE NULL
对于支持或实现SQL 92标准的RDBMS,

不是一个有意义的表达式。

首先,NULL [一直回到C.J.Date]意味着“未知”,所以没有什么可以是'LIKE'未知。

NULL的唯一有效测试是“IS NULL”或“IS NOT NULL”。

答案 1 :(得分:1)

是的,LIKE NULL在所有RDBMS中都有效。 LIKE是一个后跟字符串的运算符,字符串可以为null;所以没问题。

将值与NULL进行比较,无论哪个运算符(<<==<>LIKE等。 - IS除了特别要与NULL进行比较外),结果为UNKNOWNUNKNOWN不是TRUE,因此NULL的情况不符合条件。无论如何,如果@firstName包含NULL@firstName IS NULL的评估结果为TRUE,那么LIKE @firstName导致的结果就不重要了(因为{{当两个条件中的至少一个为@firstName IS NULL OR firstName LIKE @firstName时,1}}为TRUE

答案 2 :(得分:0)

以前曾经问过这个问题。以下是一个很好的答案:

like '%' does not accept NULL value

Behaviour of NOT LIKE with NULL values

如果您只是想检查值是否为空 - 那么请使用语法:

SELECT * FROM Employee WHERE firstName IS NULL

(NULL IS NULL将始终返回true - 它与“WHERE 1 = 1”相同)。希望这有所帮助。