【问题标题】:How to perform a CASE statement in an SQL SELECT?如何在 SQL SELECT 中执行 CASE 语句?
【发布时间】:2015-12-03 17:08:03
【问题描述】:

如何在 SQL SELECT 语句中执行 IF...THEN?我可以将 Case..then 更改为 IF..THEN,我在 Case..then 中有一些错误

DECLARE  @Display Varchar(10)   SET @Display = '210120'
DECLARE  @ret     Varchar(5)    SET @ret     = '12345'
DECLARE  @ret2    Varchar(5)    SET @ret2    = '6789'

DECLARE  @Custom2 Varchar(10)
SELECT (CASE 
          WHEN CHARINDEX(LEFT(@Display, 1),@ret) > 0 THEN
              SET @Custom2 = 'None'
          WHEN CHARINDEX(LEFT(@Display, 1),@ret2) > 0 THEN
              SET @Custom2 = @ret+'_'+@Display 
       END ) as Custom

提前谢谢你

【问题讨论】:

  • 不要尝试在选择查询中间设置变量。
  • CASE 是一个表达式(如a+b),它返回一个单个原子值——它不是一个流控制语句 可以处理代码块和类似的东西。
  • 提示:CASE 表达式也可能有一个ELSE 子句来处理任何意外数据。

标签: sql sql-server tsql case


【解决方案1】:

这里发生的事情不匹配。您不能像您正在做的那样使用案例表达式来控制流程......但是您也可以将其作为一列。目前尚不清楚您要在这里做什么,但也许这会有所帮助。

DECLARE  @Display Varchar(10)   SET @Display = '210120'
DECLARE  @ret     Varchar(5)    SET @ret     = '12345'
DECLARE  @ret2    Varchar(5)    SET @ret2    = '6789'

SELECT CASE WHEN CHARINDEX(LEFT(@Display, 1),@ret) > 0 THEN
              'None'
          WHEN CHARINDEX(LEFT(@Display, 1),@ret2) > 0 THEN
              @ret+'_'+@Display 
       END as Custom

【讨论】:

    【解决方案2】:

    你的语法有点不对,试试这个:

    SELECT @Custom2 = CASE WHEN CHARINDEX(LEFT(@Display, 1),@ret) > 0 
                           THEN 'None'
                      WHEN CHARINDEX(LEFT(@Display, 1),@ret2) > 0 
                           THEN @ret + '_' + @Display 
                      END As Custom
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-04-04
      • 2014-12-05
      • 2015-02-27
      • 2012-11-14
      • 2011-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多