簡體   English   中英

基於變量的動態WHERE條件

[英]Dynamic WHERE condition based on variable

我在SQL Server中有以下行

((@data_inicial IS NULL OR @data_inicial = '') 
OR 
tbSO.dt_criacao >= CAST(@data_inicial AS DATE))

我需要根據接收到@cod_status的一個參數來使用字段tbSO.dt_criacao。

如果@cod_status = 1,我必須使用tbSO.dt_criacao
如果@cod_status = 2,我必須使用tbSO.dt_abertura
如果@cod_status = 3,我必須使用tbSO.dt_fechamento

您能幫我解決這個問題嗎?

最好的祝福

米爾頓·卡馬拉(Milton Camara)

下面的CASE語句不能滿足您的需求嗎? 您可能需要將then語句設置為變量。

CASE @cod_status 
 When 1 then tbSO.dt_criacao 
 When 2 Then tbSO.dt_abertura 
 When 3 Then tbSO.dt_fechamento 
END

希望這可以幫助

((@data_inicial IS NULL OR @data_inicial = '') 
OR 
(@cod_status = 1 and tbSO.dt_criacao >= CAST(@data_inicial AS DATE))
OR 
(@cod_status = 2 and tbSO.dt_abertura  >= CAST(@data_inicial AS DATE))
OR 
(@cod_status = 3 and tbSO.dt_fechamento >= CAST(@data_inicial AS DATE))

問候

CASE語句是在查詢中放入條件的野獸方法。 您可以使用Case語句計算依賴於其他列或條件的任何新列。 您也可以在SUM,AVG,計數等功能中使用case語句。 您還可以將case語句放在where條件中。

您可以使用以下語法..

SELECT *
FROM TABLE
WHERE
1 = CASE 
        WHEN (
               (@data_inicial IS NULL OR @data_inicial = '') 
               OR 
               (
               CASE @cod_status 
                    When 1 then tbSO.dt_criacao 
                    When 2 Then tbSO.dt_abertura 
                    When 3 Then tbSO.dt_fechamento 
               END >= CAST(@data_inicial AS DATE)
               )
             ) THEN 1 ELSE 0 
    END

暫無
暫無

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

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