的NULL
覺得作爲一個未知值與測試,如果事情等於(或不等於)未知會導致未知(NULL
)作爲答案。當布爾過濾器爲TRUE
時,SQL查詢將顯示結果,如果一個值爲NULL
,情況就不會如此。
可以在PL/SQL測試邏輯(因爲它有一個可訪問BOOLEAN
型):
SET SERVEROUTPUT ON;
DECLARE
FUNCTION bool_to_string(bool BOOLEAN) RETURN VARCHAR2
AS
BEGIN
RETURN CASE WHEN bool IS NULL THEN 'NULL'
WHEN bool = TRUE THEN 'TRUE'
WHEN bool = FALSE THEN 'FALSE'
ELSE 'ERROR' END;
END;
BEGIN
DBMS_OUTPUT.PUT_LINE('A = A => ' || bool_to_string('A' = 'A'));
DBMS_OUTPUT.PUT_LINE('A <> A => ' || bool_to_string('A' <> 'A'));
DBMS_OUTPUT.PUT_LINE('A = NULL => ' || bool_to_string('A' = NULL));
DBMS_OUTPUT.PUT_LINE('A <> NULL => ' || bool_to_string('A' <> NULL));
END;
/
,輸出:
A = A => TRUE
A <> A => FALSE
A = NULL => NULL
A <> NULL => NULL
注意,最後兩個測試不返回FALSE
但返回NULL
。
如果你想數包括NULL
當時的你可以這樣做:
select count(*) from table where statuscode <> 13 OR statuscode IS NULL
來源
2016-03-08 14:12:47
MT0
這是預期的行爲。這就是'NULL'值的工作方式 - 除'null'之外的所有比較都返回相當於false的值。 –
http://stackoverflow.com/questions/12853944/why-in-sql-null-cant-match-with-null –
我測試它與「是null」工作,但不知道原因。謝謝。 – cacert