2017-10-06 64 views
1

我有這個疑問避免無效的一種功能

select least(                
    (select min(full_date) from lopes.vehicle_data), 
    (select min(bithday) from lopes.ad_trf_day), 
    (select min(bithday) from lopes.ad_day_rec), 
    (select min(bithday) from lopes.ad_day_rec), 
    (select min(bithday) from lopes.ad_day), 
    (select min(bithday) from lopes.ad_poi_day)) 
from dual 

但它返回NULL。有沒有辦法避免空值?

+1

查看'coalesce()'。 – jarlh

回答

1

一種選擇是避免使用LEAST

SELECT MIN(dt) 
FROM (
    SELECT full_date FROM lopes.vehicle_data UNION ALL 
    SELECT bithday FROM lopes.ad_trf_day UNION ALL 
    SELECT bithday FROM lopes.ad_day_rec UNION ALL 
    SELECT bithday FROM lopes.ad_day_rec UNION ALL 
    SELECT bithday FROM lopes.ad_day UNION ALL 
    SELECT bithday FROM lopes.ad_poi_day 
) 

這仍然會返回NULL,但只有當所有的表都是空的,或者只包含NULL值。

另一種是用COALESCENVLCASE

select least(                
     (select COALESCE(min(full_date), DATE '9999-12-31') from lopes.vehicle_data), 
     (select COALESCE(min(bithday), DATE '9999-12-31') from lopes.ad_trf_day), 
     (select COALESCE(min(bithday), DATE '9999-12-31') from lopes.ad_day_rec), 
     (select COALESCE(min(bithday), DATE '9999-12-31') from lopes.ad_day_rec), 
     (select COALESCE(min(bithday), DATE '9999-12-31') from lopes.ad_day), 
     (select COALESCE(min(bithday), DATE '9999-12-31') from lopes.ad_poi_day) 
     ) 
from dual 

這將永遠不會返回NULL,但如果所有的表是空的,或者只包含NULL值將返回「神奇」的價值DATE '9999-12-31'