簡體   English   中英

where子句中包含的sql case語句-條件邏輯

[英]sql case statement contained in where clause - conditional logic

我需要在SQL查詢中匹配一些特定於性別的數據,並且在使where子句邏輯正確時遇到了一些困難。 我正在嘗試使用一個case語句,但是被卡住了……也許case語句不是執行此操作的最佳方法,如果是這樣,任何可行的替代方法都將不勝感激。

首先,我有一個本地變量@gender。 它可以是“ male”,“ female”或null。

我從中提取數據的表中有一列名為“性別”的列,其中包含三個值之一,但永遠不會為null:“ male”,“ female”或“任一”。

邏輯很簡單。 如果本地變量是“ male”,那么我想檢索性別值為“ male”或“任一”的任何記錄。

如果局部變量是“ female”,那么我想檢索性別值為“ female”或“任一”的任何記錄。

如果局部變量為null,那么無論性別值是多少,我都想檢索記錄,因此這三個都是“男性”,“女性”或“兩個”。

到目前為止,這是我嘗試過的操作,但不確定如何進行:

 select x from y
    where UPPER(d.Gender) =
        case when upper(@gender) = 'MALE' then 'MALE' 
        when upper(@gender) = 'FEMALE' then 'FEMALE'
        when @gender is null then 'EITHER'
     end
select x from y
    where (( UPPER(d.Gender) = UPPER(@gender) OR  UPPER(d.Gender) ='EITHER') 
               AND @gender IS NOT NULL ) 
          OR (@gender IS NULL AND 1=1)

WHERE clause 1=1條件始終評估為true,實際上是一種忽略WHERE語句的技巧,因此如果@gender傳遞為NULL則返回包含性別'Male','Female'或'Either'的表的所有行,即所有返回的所有行,無論性別

不知道為什么要使用大小寫轉換。 您的數據庫區分大小寫嗎?

嘗試這個

select x from y
    where UPPER(d.Gender) = upper(@gender) 
    OR UPPER(d.Gender) = UPPER(isnull(@gender,'EITHER'))
select x from y
 where UPPER(customer_type) in 
       ('EITHER', decode(@gender, null, 'FEMALE', @gender),
        decode(@gender, null, 'MALE',  @gender)
       );

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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