如何在sql server中写case?

Posted

技术标签:

【中文标题】如何在sql server中写case?【英文标题】:How to write case in sql server? 【发布时间】:2011-12-08 07:31:03 【问题描述】:

在 sqlserver 中,我写了一个查询,我使用“case”,但它给出了错误,这是我的情况。

(case when sm.SegCode =0 then '' else sm.SegCode = 7 end)

请帮帮我。

感谢大家的回复,其实我有一个参数@id。现在我想检查它何时不为零我检查条件sm.segcode 否则如果@id 为零那么我不想检查条件sm.segcode = @id

【问题讨论】:

请贴出完整的sql语句。 在SSMS中将光标设置在CASE上,按F1就会看到这篇文章msdn.microsoft.com/en-us/library/ms181765.aspx。 CASE 在 T-SQL 中只是一种返回不同值的方法 - 它不是流控制语句,例如您不能使用 CASE 来执行此代码或该代码。只需返回值... 【参考方案1】:

您显示的陈述有两个问题:

else sm.SegCode = 7 的语法错误 尝试将类型与空字符串和 int 混合

试试这个:

case when sm.SegCode = 0 then '' else '7' end

当然,这部分是猜测,因为我不确定您通过将结果设置为空字符串或整数 7 究竟想要达到什么目的。

【讨论】:

【参考方案2】:

这在语法上是正确的:

case sm.SegCode when '0' then '' else '7' end 

case sm.SegCode when 0 then NULL else 7 end 

如果该列允许 NULL,则为

您可以在文档中查看有关案例的更多信息:http://msdn.microsoft.com/en-us/library/ms181765.aspx

【讨论】:

【参考方案3】:

总是尝试从Case 语句返回Same DATA TYPE 值,似乎你的第一个条件返回VARCHARelse 部分返回INT,这是不可能的,所以最好将每个值转换为VARCHAR ,所以 7 在else 语句中将是'7',谢谢

(CASE
    WHEN sm.SegCode = 0 THEN '' 
ELSE '7' END)

【讨论】:

以上是关于如何在sql server中写case?的主要内容,如果未能解决你的问题,请参考以下文章

如何在不同条件的sql server的case语句中插入多个else?

如何在 SQL Server 的 Where 子句中使用 case 语句

SQL Server 2012:如何在 @Var 前后使用文字在 Case 语句中显示 @Var 结果

SQL Server 2008 - SELECT 子句中的 Case / If 语句 [重复]

始终加密 - SQL Server 2016 如何在加密列上使用用户案例语句

sql server如何批量更新数据。