SQL LIKE NULL 是否对所有数据库有效?

Is SQL LIKE NULL valid syntax for all database?

我有一个简单的查询(实际查询会比较复杂,是动态查询)

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

@firstName 将作为

传递

当@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

我的问题是

firstName LIKE NULL 对所有 SQL 数据库有效吗?它会一直被评估为 FALSE 吗?

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

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

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

之前有人问过这个问题。这里有一些很好的答案:

like '%' does not accept NULL value

Behaviour of NOT LIKE with NULL values

如果您只是想检查值是否为 NULL,那么语法如下:

SELECT * 来自名字为 NULL 的员工

(NULL IS NULL 将始终 return 为真 - 它与 "WHERE 1 = 1" 相同)。希望这能有所帮助。

LIKE NULL

对于支持或实施 SQL 92 标准的 RDBM 来说不是有意义的表达式。

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

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

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

将值与 NULL 进行比较,无论是什么运算符(<<==<>LIKE、等等 - 除了 IS 是专门用来与 NULL 进行比较的),导致 UNKNOWNUNKNOWN不是TRUE,所以NULL不满足条件。无论如何,如果 @firstName 包含 NULL@firstName IS NULL 的计算结果为 TRUE,那么 LIKE @firstName 的结果甚至都不重要(因为 @firstName IS NULL OR firstName LIKE @firstNameTRUE,当至少两个条件之一是TRUE)。