【问题标题】:case statement in string字符串中的 case 语句
【发布时间】:2017-01-08 11:09:42
【问题描述】:

基本上,我想将一个字符串存储在一个变量中。但是我想从其他地方取一些内容,比如根据条件改变一些结果。

示例。
我有 3 个学生 - a、b、c。所以就在这里。

DECLARE @intro nvarchar(80) = 'Hi!!! My Name is ' + 
          CASE WHEN 'a' THEN 'Ashley' WHEN 'b' THEN 'Bernard' WHEN 'c' THEN 'Cassie'

但是加号给出了一个错误。我知道我可以通过上面提到的 case 语句创建另一个变量并为其添加值并将其放置而不是 case 语句,但我想知道是否有任何其他方法可以在不使用新变量的情况下做到这一点?

提前致谢

【问题讨论】:

  • 请发布整个查询和错误信息
  • case when 'a' 不测试任何东西 - 你在测试什么看它是否是'a'?它应该采用case when somefield = 'a' then...case somefield when 'a' then... 的形式。如前所述,您必须输入 end 关键字才能完成 case 语句
  • 除非这是一个旨在让您学习如何使用 CASE 语句的课堂作业,否则这对我来说就像是代码异味。考虑创建一个名称表,使用INNER JOINCASE 的语法也是 CASE <something> WHEN... 您缺少将针对 WHEN 值进行测试的 something

标签: sql sql-server string sql-server-2012 case


【解决方案1】:

您没有比较案例陈述中的任何内容...尝试类似这样的方法,将您的学生与您要检查的逻辑进行比较。

DECLARE @student char(1) = 'b'
DECLARE @intro nvarchar(80) = 'Hi!!! My Name is '
SET @intro = @intro + 
                    CASE 
                        WHEN @student = 'a' THEN 'Ashley' 
                        WHEN  @student = 'b' THEN 'Bernard' 
                        WHEN  @student = 'c' THEN 'Cassie'
                        ELSE ''
                    END

SELECT @intro

【讨论】:

    【解决方案2】:

    您的CASE WHEN 条件应与 2 个值进行比较。

    DECLARE @student char(1) = 'c'
    DECLARE @intro nvarchar(80) = 'Hi!!! My Name is ' + 
              CASE @student WHEN 'a' THEN 'Ashley' WHEN 'b' THEN 'Bernard' WHEN 'c' THEN 'Cassie' END 
    SELECT @intro
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-01-09
      • 1970-01-01
      • 1970-01-01
      • 2014-05-07
      • 2016-12-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多