根据IF条件更改WHERE条件中使用的列

时间:2018-01-11 19:22:20

标签: sql sql-server tsql

我为标题道歉 - 我正在努力想出更好的东西。

对此进行了一些研究并找到了一些close examples,但这并不是我需要的。

基本上我有一个包含两列的表,我想在某些条件下进行评估。第1列是一个也可以为null的标识符。第2列是SessionId,也可以更改。

主要是关闭column1,但是当column1为null时,我想改为关闭column2。上面链接的示例不会更改WHERE子句中正在计算的列,只会更改用于计算子句的值。

这是一些伪代码来说明我想要做的事情:

SELECT * FROM MyTable
WHERE
IF Column1 NOT NULL
   Column1 = @myvariable1
ELSE
   Column2 LIKE '%' + @myvariable2 + '%'

这样的事情是否可能?我可以根据其中一列的值来切换要在WHERE子句中计算的列吗?

我希望所有这些都有意义。

TIA

3 个答案:

答案 0 :(得分:4)

您可以使用CASE

SELECT * 
FROM MyTable
WHERE (CASE WHEN Column1 IS NOT NULL AND Column1 = @myvariable1 THEN 1
            WHEN Column2 LIKE '%' + @myvariable2 + '%' THEN 1
            ELSE 0
      END) = 1;

答案 1 :(得分:1)

如果将@ myvariable1设置为null,则应在对where子句进行验证时检查Column1上是否可为空。

<img :src="'statics/icons/svg/color/' + symbol + '.svg'"/>

答案 2 :(得分:0)

WHERE  Column1 = @myvariable1
OR   ( Column1 IS NULL AND Column2 LIKE '%' + @myvariable2 + '%' )