簡體   English   中英

我如何在 where 子句中使用 If Else

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM