[英]How can i use case statement in where condition in sql server
我有這個代碼。 我想在WHERE
子句中使用CASE
語句,但它不會運行:
SELECT
pdc_distribution,
pdc_refund,pdc_type,
pdc_amount
FROM user_pdc_informations
WHERE
(
CASE WHEN pdc_type='D'
THEN (created_at BETWEEN 1583951400 AND 1584037799)
ELSE 1
END
)
AND sport_id = 4
AND user_id = 7
AND match_id = 29743945
如何在此查詢中使用 case 條件?
考慮使用OR
代替:
SELECT
pdc_distribution,
pdc_refund,pdc_type,
pdc_amount
FROM user_pdc_informations
WHERE
(pdc_type <> 'D' OR created_at BETWEEN 1583951400 AND 1584037799)
AND sport_id = 4
AND user_id = 7
AND match_id = 29743945
您可以使用布爾邏輯:
( (pdc_type = 'D' and created_at >= 1583951400 and created_at <= 1584037799) or
(pdc_type <> 'D' and created_at = 1)
)
CASE
表達式產生值,而不是代碼。 在WHERE
子句中,這意味着結果應該是與其他內容進行比較的一側。 在這種情況下,根本不需要CASE
。
SELECT
pdc_distribution,
pdc_refund,pdc_type,
pdc_amount
FROM user_pdc_informations
WHERE (created_at BETWEEN 1583951400 AND 1584037799 OR pdc_type <> 'D')
AND sport_id = 4
AND user_id = 7
AND match_id = 29743945
但也要顯示 CASE 表達式的正確用戶:
SELECT
pdc_distribution,
pdc_refund,pdc_type,
pdc_amount
FROM user_pdc_informations
WHERE
1 = CASE WHEN pdc_type = 'D' AND created_at BETWEEN 1583951400 AND 1584037799 THEN 1
WHEN pdc_type = 'D' AND created_at NOT BETWEEN 1583951400 AND 1584037799 THEN 0
ELSE 1 END
AND sport_id = 4
AND user_id = 7
AND match_id = 29743945
幫助編寫有效 case 表達式的一種方法是考慮結果的數據類型。 它是一個varchar嗎? 整數? 不要嘗試使用布爾值。
應該是這樣的:
SELECT
pdc_distribution
,pdc_refund
,pdc_type
,pdc_amount
FROM
user_pdc_informations
WHERE
created_at BETWEEN CASE WHEN pdc_type='D' THEN 1583951400 ELSE 1 END AND CASE WHEN pdc_type='D' THEN 1584037799 ELSE 1 END
AND sport_id =4
AND user_id = 7
AND match_id=29743945
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.