計算空值我有兩個日期:一個StartDate
和CreatedDate
帶有日期
如果我說,如果StartDate
是NULL
CreatedDate < StartDate
會發生什麼?
我應該使用
isnull(startdate,0)
還是會只返回一個NULL
,否則將永遠是小於StartDate
爲StartDate
是NULL
?
計算空值我有兩個日期:一個StartDate
和CreatedDate
帶有日期
如果我說,如果StartDate
是NULL
CreatedDate < StartDate
會發生什麼?
我應該使用
isnull(startdate,0)
還是會只返回一個NULL
,否則將永遠是小於StartDate
爲StartDate
是NULL
?
任何普通的比較(>,<,> =,< =,=,<>一樣,在)返回null如果它們的參數的至少一個是空;所以CreatedDate <如果StartDate爲null,則StartDate返回null。您可以測試空明確:
((CreatedDate < StartDate) or (StartDate is null))
或者你可以至於會發生什麼轉變起始日期值
(CreatedDate < NVL(StartDate, To_Date('1.1.1000', 'DD.MM.YYYY')) -- <- Oracle Syntax
感謝你,是一個完美的答案,我一直在尋找綜合和對點 – LoveToys
你必須檢查null
。
如果您沒有檢查null
那麼您的比較將會產生unknown
這就是false
。
如果同時StartDate
和CreatedDate
可以NULL
,你可以使用SQL COALESCE
function提供的默認值,例如一個足夠小的日期和一個足夠大:
SELECT ...
FROM ...
WHERE COALESCE(StartDate, DATE '0001-01-01') < COALESCE(CreatedDate, DATE '9999-12-31')
這裏我使用standard SQL date and time literals。
注:日期和時間限制,在不同的數據庫服務器有所不同。上面的例子works for the Oracle Database
,當你嘗試過什麼事?至於你應該做什麼,你的商業規則是什麼? –
更重要的是,當'StartDate'爲'NULL'時會發生什麼?你想達到什麼目的? –