0

我在 SQL Server 中有以下行

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

我需要使用字段 tbSO.dt_criacao,具体取决于我收到@cod_status 的一个参数。

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

你能帮我解决这个问题吗?

此致

米尔顿·卡马拉

4

3 回答 3

2

像下面这样的 CASE 语句不能满足您的需求吗?您可以让 then 语句设置一个变量。

CASE @cod_status 
 When 1 then tbSO.dt_criacao 
 When 2 Then tbSO.dt_abertura 
 When 3 Then tbSO.dt_fechamento 
END
于 2012-11-06T17:07:32.990 回答
1

希望这可以帮助

((@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))

问候

于 2012-11-06T17:26:07.567 回答
1

CASE 语句是将条件放入 Query 的野兽方式。您可以使用 Case 语句计算任何依赖于其他列或条件的新列。您也可以在 SUM、AVG、count 等函数中使用 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
于 2012-11-06T20:29:15.490 回答