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