ORACLE的 NVL, NULLIF 与 DECODE 函数用法比较(一行代码说明一切)

1、下面示例为了说明:NVL(NULLIF(A.SICKBEDID,-1), B.SICKBEDID) 等效于 DECODE(A.SICKBEDID,-1, B.SICKBEDID, A.SICKBEDID)

SELECT NVL(NULLIF(A.SICKBEDID,-1), B.SICKBEDID), DECODE(A.SICKBEDID,-1, B.SICKBEDID, A.SICKBEDID), a.*, b.*
FROM (
    SELECT ENCOUNTERID, SICKBEDID , ORDERREQUESTID, ORDERDATE, COMBINEDMEDICATIONREQUESTID, SUM(Amount) AS Amount,Max(REPEATNUMBER) AS REPEATNUMBER, Max(RouteId) AS RouteId, Max(AuthorId) AS AuthorId
    FROM PORX.APPLICATIONMEDICINE
    GROUP BY ENCOUNTERID, SICKBEDID, ORDERREQUESTID, ORDERDATE, COMBINEDMEDICATIONREQUESTID
    ) A INNER JOIN  PRPA.ENCOUNTER B
ON A.ENCOUNTERID = b.ENCOUNTERID;

2、除了上面3个函数外,还有一个是NVL的扩展,函数NVL2(condition, expression1, expression2):如果条件表达式的值不为NULL,则返回表达式1的值,否则返回表达式2的值,很容易理解。

3、NULLIF函数还有一个很有价值的场景,譬如用在触发器上,如字段的新值与旧值相同跟踪表不做记录或记录NULL,否则记录新值。

posted @ 2024-09-09 16:06  Chr☆s  阅读(2)  评论(0编辑  收藏  举报