如何在数字的sql case语句中测试条件

时间:2019-06-06 20:39:48

标签: sql sql-server

我想用我的Microsoft SQL Server 2017上的SQL CASE语句用空字符串替换所有大于或等于10的值。但是,我收到一条错误消息:

  

第15层状态1的第13行的消息102
  '>'附近的语法不正确。

尽管存在一些与我的问题类似的问题,但我找不到专门回答我的问题的答案。例如,这里的问题how to use > = condition in sql case statement?。我也尝试过使用时态表进行动态查询,但这无济于事。

这是我的代码,其中包含表定义和测试数据以及正在运行的实际查询。

--table definition with two columns
declare @table table 
               (
                    person nvarchar(20),
                    digit decimal(10,2)
               )

--insert test data with two records
insert into @table
    select 'titimo', 9.51
    union 
    select 'neriwo', 12.25

--the requirement is to not show the digit value if it is greater or equal to 10, but rather display an empty field.
--so, this is my select statement to meet this requirement that is failing 
--with error message 'Incorrect syntax near >'
select
    person,
    case digit
        when digit >= 10 then ''
        else digit
    end 'digit'
from @table

从上面的select语句中,我期望得到以下输出:

person digit
------ -----
titimo 9.51
neriwo 

但是,由于我遇到的错误消息,未生成输出。

2 个答案:

答案 0 :(得分:2)

您的case中存在语法错误。此外,您无法混合使用数据类型,因此需要将digit强制转换为varchar或将''即更改为null

select
    person,
    case 
        when digit >= 10  then ''
        else cast(digit as varchar(20))
    end 'digit'
from @table

答案 1 :(得分:1)

您的案件格式不正确-这是一个选项- (同样,您不能在同一列中选择文本和数字-因此我将您的数字转换为文本...进行调整以满足您的需求)

select
    person,
    case when digit >=10 then ''
        else CONVERT(VARCHAR(10), digit)
    end 'digit'
from @table