應使用兩列:Customer_num是第一個,但如果爲null,則使用Vendor_num。Oracle PL/SQL - DECODE語句
更具體,我需要寫一個DECODE語句,將返回以下內容:
如果CUSTOMER_NUM IS NOT NULL,則返回CUSTOMER_NUM 如果CUSTOMER_NUM爲NULL,則返回Vendor_num 如果Vendor_num爲null,或者CUSTOMER_NUM IS NULL然後返回Customer_num
我該怎麼做?
謝謝...
應使用兩列:Customer_num是第一個,但如果爲null,則使用Vendor_num。Oracle PL/SQL - DECODE語句
更具體,我需要寫一個DECODE語句,將返回以下內容:
如果CUSTOMER_NUM IS NOT NULL,則返回CUSTOMER_NUM 如果CUSTOMER_NUM爲NULL,則返回Vendor_num 如果Vendor_num爲null,或者CUSTOMER_NUM IS NULL然後返回Customer_num
我該怎麼做?
謝謝...
我認爲你正在尋找
COALESCE(CUSTOMER_NUM,Vendor_num)
注意這最後一個要求
如果Vendor_num爲NULL或者如果Customer_num爲NULL,則返回Customer_num
將重新調用Customer_num(由於第一個要求)或NULL時它們都爲null。
不用擔心,我使用NVL(DECODE(..))自己計算出來的。謝謝。 – valmont74 2011-01-13 18:49:45
嘗試
SELECT coalesce(expr1, expr2, ... expr_n)
FROM DUAL;
這不是我一直在尋找,但仍然感謝。我自己使用DECODE來解決它。直到現在,我還沒有意識到COALESCE。再次感謝。 – valmont74 2011-01-13 18:47:29
我與其他海報的「更好」的方式來做到這一點是使用NVL或COALESCE同意。不過,雖然我沒想到這個工作,看來下面會做你問:
SELECT DECODE(CUSTOMER_NUM,
NULL, DECODE(VENDOR_NUM,
NULL, CUSTOMER_NUM,
VENDOR_NUM),
CUSTOMER_NUM)
FROM DUAL;
有什麼奇怪的是,我們可以用DECODE來比較值設置爲NULL,並使其返回(顯然)真正。在我的腦海裏上面的代碼在概念上是一樣的
IF CUSTOMER_NUM = NULL THEN
IF VENDOR_NUM = NULL THEN
RETURN CUSTOMER_NUM;
ELSE
RETURN VENDOR_NUM;
END IF;
ELSE
RETURN CUSTOMER_NUM;
END;
顯然DECODE是足夠明亮,猶如使用NULL子句的IS執行比較爲NULL。感謝您提出這個有趣的小問題。
謝謝,`DECODE`語句包裝在'SELECT`中`... FROM DUAL`對我來說工作得很好,儘管它可能會更清晰地使用'CASE`。 – peterp 2013-02-08 09:23:06
不用擔心,我自己用NVL(DECODE(..))算出來了。謝謝。 – valmont74 2011-01-13 18:49:02