[英]How i can use If Else in where clause
在存儲過程中,我想根據輸入參數 in_customerid 獲取客戶列表,如果輸入 customerid 不是 null 或 0,則獲取 customerId 等於 in_customerid 的所有客戶,否則為 select 所有客戶。
我在這里嘗試了代碼,也嘗試了 case 語句
select * from Customer
WHERE (IF in_customerId = 0 OR in_customerId IS NULL
THEN customerId>0
ELSE
customerId=in_customerId
END IF)
如果輸入的 customerid 不是 null 或 0,則獲取 customerId 等於 in_customerid 的所有客戶,否則為 select 所有客戶。
您的代碼幾乎就在那里。 試試這個:
SELECT *
FROM Customer
WHERE ((in_customerId IS NULL OR in_customerId = 0) OR
(in_customerId IS NOT NULL AND in_customerId <> 0 AND customerId = in_customerId))
這將返回in_customerId
參數為 NULL 的所有客戶。
在in_customerId
有值的情況下,它將只返回匹配的行。
您可以使用CASE.. WHEN
表達式,因為如果傳遞的參數是 null 或 0,則不需要任何條件,如下所示:
SELECT *
FROM CUSTOMER
WHERE
CUSTOMERID = CASE
WHEN IN_CUSTOMERID = 0
OR IN_CUSTOMERID IS NULL THEN CUSTOMERID
ELSE IN_CUSTOMERID
END;
干杯!!
您可以使用nvl()
function 和參數零作為nvl(in_customerId,0)
來組合in_customerId
為 null 或零的情況:
SELECT *
FROM customer
WHERE customerId = case when nvl(in_customerId,0) > 0
then in_customerId
else customerId
end;
另一個選項使用nvl2()
function 和decode()
:
SELECT *
FROM customer
WHERE customerId = decode( in_customerId, 0, customerId,
nvl2(in_customerId,in_customerId,customerId) );
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.