这个问题在这里已有答案:
我有一个带有这个字段的oracle表
"SYSTEM_HIDDEN" CHAR(1 BYTE),
我有一个行id(26119),该字段的值为NULL . 但是当我使用此语句查询此行时,不返回任何行:
SELECT * FROM T_BOOK WHERE id =26119 and SYSTEM_HIDDEN <> 'T'
在Oracle Database 11g企业版11.2.0.4.0版 - 64位 生产环境 中
NULL 值在所有比较中都表现特殊( IS NULL 和 IS NOT NULL 除外),将 NULL 与 = , <> , > , < , >= , <= 进行比较,始终返回 NULL ,最终在不选择任何行方面表现得像 FALSE .
NULL
IS NULL
IS NOT NULL
=
<>
>
<
>=
<=
FALSE
请改用 (SYSTEM_HIDDEN <> 'T' or SYSTEM_HIDDEN IS NULL) 或 NVL(SYSTEM_HIDDEN, 'F') <> 'T'
(SYSTEM_HIDDEN <> 'T' or SYSTEM_HIDDEN IS NULL)
NVL(SYSTEM_HIDDEN, 'F') <> 'T'
1 回答
NULL
值在所有比较中都表现特殊(IS NULL
和IS NOT NULL
除外),将NULL
与=
,<>
,>
,<
,>=
,<=
进行比较,始终返回NULL
,最终在不选择任何行方面表现得像FALSE
.请改用
(SYSTEM_HIDDEN <> 'T' or SYSTEM_HIDDEN IS NULL)
或NVL(SYSTEM_HIDDEN, 'F') <> 'T'