如何在WHERE子句中使用CASE

时间:2016-08-25 13:21:07

标签: sql-server case

我的表field1和field2中有两列。

在我想要检查field2是否为NULL的地方。

如果为NULL,那么我的位置将如下所示

其中field1 =' myvalue'

如果它不是NULL,我想连接field1和field2中的值,中间有一个+。喜欢这个

where field1 + field2 =' myvalue'

我试过这样的事,但我没有工作。

WHERE CASE field2 IS NOT NULL 
THEN field1+field2
ELSE field1
END = 'myvalue'

例如,field2有一个值,比方说7252而field1有7311,那么它必须看起来像这样。

WHERE 7311+7252 = 'myvalue'并且如果field2为空

WHERE 7311 = 'myvalue'.

有人能帮助我吗? :)

5 个答案:

答案 0 :(得分:1)

您可以将此案例转换为两种情况,并使用OR

SELECT * FROM YourTable t
WHERE (t.field2 IS NULL AND t.field1 = 'myvalue')
   OR (t.field2 IS NOT NULL AND field1 + field2 = 'myvalue')

或者您可以使用CASE EXPRESSION

执行此操作
SELECT * FROM YourTable t
WHERE 'myvalue' = CASE WHEN t.field2 IS NULL THEN t.field1
                       ELSE field1+field2
                  END

答案 1 :(得分:1)

您可以使用./print.pl <1.txt 2.txt ,如下所示:

COALESCE

例如

SELECT
    *
FROM
    Tbl
WHERE
    COALESCE(field1 + field2, field1) = 'Your Value'

答案 2 :(得分:0)

请尝试:field1 + ISNULL(field2,&#39;&#39;)=&#39; myvalue&#39;

答案 3 :(得分:0)

如果不使用CASE语句是一个选项,您可以尝试这样的事情:

WHERE 
    (NOT field2 IS NULL AND field1 + field2 = 'myvalue') 
    OR (field2 IS NULL AND field1 = 'myvalue')

答案 4 :(得分:0)

我假设你的t.field1和t.field2是数值数据类型。

SELECT *
FROM YourTable t
WHERE t.field1 + ISNULL(field2, 0) = 'myvalue'