SQL Where语句带有CASE变量

时间:2017-05-08 21:52:48

标签: sql variables case

对不起,我没有完整的查询,因为我的原文实际上很长,但我觉得你可以找到我的语法错误。基本上我声明了2个变量,如果一个变量是空白,我需要将where语句放在字段不在另一个变量中的位置。

Where dnCP_FromServiceDate >= '01/01/2016' And
dnCP_FromServiceDate <= '01/31/2016' And
dnCP_RecordStatus <> 'V' 
AND CASE  WHEN @inpDXIN = ''  THEN
predxDiagnosisCode not in (@inpDXNOTIN)
ELSE  predxDiagnosisCode IN (@inpDXIN)
END 

即使我可以使用类似的声明获得一个查询片段,我可以想出我的但我无法找到类似的东西。非常感谢任何帮助

1 个答案:

答案 0 :(得分:1)

通常,您不希望在case子句中使用where。相反,只需使用常规布尔逻辑:

Where dnCP_FromServiceDate >= '2016-01-01' and
      dnCP_FromServiceDate <= '2016-01-31' and
      dnCP_RecordStatus <> 'V' and
      ( (@inpDXIN = '' and predxDiagnosisCode <> @inpDXNOTIN) or
        (@inpDXIN <> '' and  predxDiagnosisCode IN (@inpDXIN)
     )

注意:

  • 使用ISO / ANSI标准日期格式。更不用说了。
  • IN (@var)= @var相同。您无法通过变量传递in列表。如果您需要该功能,请询问其他问题。
  • SQL的大多数方言都不允许从case返回布尔表达式。以上解决了这个“限制”。