为什么大多数(全部?)SQL数据库会给出以下结果:
SELECT FALSE < FALSE; -- FALSE / 0 Ok SELECT TRUE < FALSE; -- FALSE / 0 Ok SELECT NOT(FALSE) < FALSE; -- TRUE / 1 什么? SELECT NOT(TRUE) < FALSE; -- TRUE / 1 什么??
只是再次确认一下:
SELECT NOT(TRUE) = FALSE; -- TRUE / 1 Ok SELECT NOT(FALSE) = TRUE; -- TRUE / 1 Ok
在Postgres中,我也可以检查:
SELECT pg_typeof(TRUE), pg_typeof(NOT(FALSE)); -- boolean | boolean
我已经尝试过PostgreSQL、SQLite3和MariaDB,它们都得出了相同的意外结果。
我漏掉了什么?
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
我不确定
NOT(FALSE)是如何评估的,但NOT不是一个函数。如果你想要对一个布尔字面量取非,那么括号应该放在整个表达式的周围,即使用(NOT FALSE)而不是NOT(FALSE)。考虑以下示例: