如何在查詢中查找未使用'is null'的日期列爲空的行?不使用'isnull'並查找特定列中空值爲零的行
SELECT * FROM HR_OPERATING_UNITS WHERE date_to IS NULL;
在上面的查詢中我想使用一個綁定變量,它可以有null。 因此,預計查詢:
SELECT * FROM HR_OPERATING_UNITS WHERE date_to=:P_TO_DATE;
但上面的語句不取通過任何行,雖然在結合可變空。
如何在查詢中查找未使用'is null'的日期列爲空的行?不使用'isnull'並查找特定列中空值爲零的行
SELECT * FROM HR_OPERATING_UNITS WHERE date_to IS NULL;
在上面的查詢中我想使用一個綁定變量,它可以有null。 因此,預計查詢:
SELECT * FROM HR_OPERATING_UNITS WHERE date_to=:P_TO_DATE;
但上面的語句不取通過任何行,雖然在結合可變空。
的標準方法是分開處理的變量被空:
SELECT * FROM HR_OPERATING_UNITS
WHERE date_to=:P_TO_DATE
OR (:P_TO_DATE IS NULL AND date_to IS NULL)
如果你真的只能有一個參考變量:
SELECT * FROM HR_OPERATING_UNITS
WHERE COALESCE(date_to, '1900-01-01') = COALESCE(:P_TO_DATE, '1900-01-01')
採摘,將永遠不會出現在值date_to
列作爲虛擬值。
**非常感謝** – user2042156
如果該值爲null,則使用日期最小值:
ISNULL(date_to,cast('1753-1-1' as datetime)) = ISNULL(:P_TO_DATE,cast('1753-1-1' as datetime))
這是SQL Server,也許有NVL
更換ISNULL如果我明白你的問題,你要篩選時或綁定變量是null,或者不是。如果是這樣,請嘗試以下操作:
SELECT * FROM HR_OPERATING_UNITS WHERE (:P_TO_DATE IS NULL AND date_to IS NULL) OR (date_to=:P_TO_DATE);
可以使用coalesce()
做到這一點:
SELECT *
FROM HR_OPERATING_UNITS
WHERE coalesce(date_to, '2000-01-01') = coalesce(:P_TO_DATE, '2000-01-01')
這假定'2000-01-01'
不date_to
有效日期值。
如果兩個值都是NULL
,則默認日期比較爲true。如果兩者都不是NULL
,那麼比較是列的值。如果其中一個是'NULL'
,那麼比較的結果是默認值爲false。
會在'date_to'上使用'coalesce'使'date_to'上的索引不被使用? – iruvar
@ 1_CR。 。 。在大多數數據庫中,「是」。 「正確的」解決方案是波希米亞人提出的解決方案,但OP明確指出他/她不想使用'is null'。 –
第一:請不要把所有內容都寫在上面 - 它確實很難閱讀,在人們看來它被認爲是** SHOUTING **,而且很粗魯。其次:爲***什麼數據庫系統***是這樣的? SQL只是查詢語言 - 被許多數據庫使用.....是MySQL嗎? Postgres的? IBM DB2?甲骨文? SQL Server?火鳥? Interbase的?完全不同的東西? –