簡體   English   中英

我如何在sql server的where條件中使用case語句

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

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