1.下面這行代碼可以很好解釋關於null值判斷的真髓。
SELECT D.*
FROM TT_BOOKING_ORDER D
WHERE 1 = 1
and d.BOOKING_ORDER_STATUS !=12781002
and d.BOOKING_ORDER_STATUS is null;
上面的sql是查詢不出任何結果的,因爲“!=”默認是有值的。
2.下面的這行代碼是大家常用的過濾sql。
SELECT D.*
FROM TT_BOOKING_ORDER D
WHERE 1 = 1
and d.BOOKING_ORDER_STATUS != 12781002;
注意:這裏的“!=”是查不到null值的。
3.如果想查詢包含null值,並且不等於其他值的情況,代碼如下:
SELECT D.*
FROM TT_BOOKING_ORDER D
WHERE 1 = 1
and d.BOOKING_ORDER_STATUS !=12781002
or d.BOOKING_ORDER_STATUS is null;
4.當查詢包含其他條件時,需要注意,比如下面這種情況,查詢出來的結果就會有問題。
SELECT D.BOOKING_COME_TIME,d.*
FROM TT_BOOKING_ORDER D
WHERE 1 = 1
and D.BOOKING_COME_TIME > '2018-09-11 16:49:00'
AND D.BOOKING_COME_TIME <= '2018-09-11 16:59:59'
AND D.BOOKING_ORDER_STATUS != 12541002
or d.BOOKING_ORDER_STATUS IS NULL
查詢結果如下,查詢出一條時間沒有過濾掉的數據
5.正確的寫法,相信大家都知道了,加個括號,如下:
SELECT D.BOOKING_COME_TIME, d.*
FROM TT_BOOKING_ORDER D
WHERE 1 = 1
and D.BOOKING_COME_TIME > '2018-09-11 16:49:00'
AND D.BOOKING_COME_TIME <= '2018-09-11 16:59:59'
AND (D.BOOKING_ORDER_STATUS != 12541002
or d.BOOKING_ORDER_STATUS IS NULL)
注意:這裏有個優先級的問題。
參考: