Sql server 如何在WHERE子句中使用CASE

Sql server 如何在WHERE子句中使用CASE,sql-server,case,Sql Server,Case,我的表field1和field2中有两列 在我的示例中,我想检查field2是否为NULL 如果为NULL,那么我的where将如下所示 其中field1='myvalue' 如果它不为NULL,我想将field1和field2中的值连接在一起,中间有一个+。像这样 其中field1+field2='myvalue' 我试过这样的方法,但没有成功 WHERE CASE field2 IS NOT NULL THEN field1+field2 ELSE field1 END = 'myvalu

我的表field1和field2中有两列

在我的示例中,我想检查field2是否为NULL

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

其中field1='myvalue'

如果它不为NULL,我想将field1和field2中的值连接在一起,中间有一个+。像这样

其中field1+field2='myvalue'

我试过这样的方法,但没有成功

WHERE CASE field2 IS NOT NULL 
THEN field1+field2
ELSE field1
END = 'myvalue'
例如,field2有一个值,比如说7252,field1有7311,那么它必须看起来像这样

其中7311+7252='myvalue'
如果字段2为空

WHERE 7311 = 'myvalue'.

有人能帮我吗?:)

您可以将这种情况转换为两种情况,并使用

SELECT * FROM YourTable t
WHERE (t.field2 IS NULL AND t.field1 = 'myvalue')
   OR (t.field2 IS NOT NULL AND field1 + field2 = 'myvalue')
或者,您可以使用
大小写表达式执行此操作:

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

请尝试:field1+ISNULL(field2',)=“myvalue”

如果不使用
CASE
语句作为选项,您可以尝试以下操作:

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

您可以使用
COALESCE
,如下所示:

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


我假设您的t.field1和t.field2是数字数据类型

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

您可能希望首先将它们转换为
varchar
我不太确定,它们可能已经是varchar的,它们可能是它们应该有的数字(可能myvalue代表一个数字)@NickyvV。我相信OP能正确地处理它。哦,是的,我没有想到OP可能想要添加数字。这不是
t-SQL
语法,尽管逻辑是正确的:)你完全正确,我仍然处于C模式;)更正了我的答案,谢谢。
SELECT *
FROM YourTable t
WHERE t.field1 + ISNULL(field2, 0) = 'myvalue'