应使用两列: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