[英]How to use Oracle's decode function in where clause
我有一個很少有過濾條件的查詢,其中一個是作為整數參數進入查詢的。 我只想在此整數> 0時使用此過濾器,因為它永遠不會為null,所以我不能使用NVL。 在這種情況下如何使用DECODE
?
SELECT (columns list)
FROM
AGREEMENT A
WHERE
A.ACCOUNT = 545
AND A.GRP_ID = NVL(?,A.GRP_ID)
參數?
我得到的是整數
您可以使用一個案例:
SELECT (columns list)
FROM
AGREEMENT A
WHERE
A.ACCOUNT = 545
AND A.GRP_ID = CASE ? WHEN 0 THEN A.GRP_ID ELSE ? END
盡管我認為解碼的可讀性較差,但解碼的工作方式與此類似。
SELECT (columns list)
FROM
AGREEMENT A
WHERE
A.ACCOUNT = 545
AND A.GRP_ID = DECODE(?, 0, A.GRP_ID, ?)
但是給定用例,將參數設置為NULL會更好一些。 畢竟,0是您要視為其他值的值,而NULL在語義上對於指定“無過濾器”更有意義。
不要使用decode()
。 它確實是非常老式的。 您可以使用case
或僅輸入正確的邏輯,如下所示:
where a.account = 545 and
(? = 0 or a.grp_id = ?)
當然,這需要兩次使用參數。 但是,這對於decode()
也是必要的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.