SQL LIKE NULL 是否对所有数据库有效?
Is SQL LIKE NULL valid syntax for all database?
我有一个简单的查询(实际查询会比较复杂,是动态查询)
SELECT * FROM Employee WHERE @firstName IS NULL OR firstName LIKE @firstName
@firstName 将作为
传递
- 空
- '%name%'
当@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
进行比较的),导致 UNKNOWN
。 UNKNOWN
不是TRUE
,所以NULL
不满足条件。无论如何,如果 @firstName
包含 NULL
,@firstName IS NULL
的计算结果为 TRUE
,那么 LIKE @firstName
的结果甚至都不重要(因为 @firstName IS NULL OR firstName LIKE @firstName
是TRUE
,当至少两个条件之一是TRUE
)。
我有一个简单的查询(实际查询会比较复杂,是动态查询)
SELECT * FROM Employee WHERE @firstName IS NULL OR firstName LIKE @firstName
@firstName 将作为
传递- 空
- '%name%'
当@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
进行比较的),导致 UNKNOWN
。 UNKNOWN
不是TRUE
,所以NULL
不满足条件。无论如何,如果 @firstName
包含 NULL
,@firstName IS NULL
的计算结果为 TRUE
,那么 LIKE @firstName
的结果甚至都不重要(因为 @firstName IS NULL OR firstName LIKE @firstName
是TRUE
,当至少两个条件之一是TRUE
)。