从case语句设置变量值

时间:2014-05-12 10:36:53

标签: sql sql-server sql-server-2008

如果值小于1,我需要在昏迷后计算字符串中的所有'0'。 示例: 我有字符串'0,005',结果将是2。

这很好用:

declare @s varchar(15), @i int
Set @s='0,05'
Set @i=Len(Substring(@s, 3, Len(@s)-3));
print @i

但如果我这样做,我就会出错:

declare @s varchar(15), @i int
Set @s='0,05'
select
  case
    when CAST(@s as decimal)<1 then set @i= Len(Substring(@s, 3, Len(@s)-3))
  end

错误是“关键字'Set'附近的语法不正确”。 我该怎么办?

4 个答案:

答案 0 :(得分:1)

案例陈述应如下所示:

SET @i = CASE WHEN codition here Then result1 Else result2 END

如何将0,05转换为Numeric?我想不到。

如下所示:

Declare @s varchar(15), @i int
Set @s='0,05'
SET @i = case when CAST(@s as decimal) < 1 then Len(Substring(@s, 3, Len(@s)-3)) End
                   ^^^^^^^^^^^^^^^^^^^ --Invalid Cast

答案 1 :(得分:1)

如果使用值“0,011”,其他克隆的答案将给出错误的结果。转换为十进制也会出现问题。 这应该返回正确的结果。

DECLARE @s varchar(15), @i int
Set @s='0,05'
SET @i = case when @s like '%[1-9]%,%' or @s not like '%,%[1-9]%' then 0
              else PatIndex('%[1-9]%',stuff(@s, 1, charindex(',', @s), '')) - 1
         end
SELECT @i

答案 2 :(得分:0)

declare @s varchar(15), @i int
set @s = '0,05'
set @i = case
           when @s like '0,%' then patindex('%[1-9]%', substring(@s, 3, len(@s) - 2)) - 1
           else 0
         end
select @i

答案 3 :(得分:0)

Declare @s varchar(15), @i int
Set @s='0,05'
SET @i = case when LEN(@s) > 1 then Len(Substring(@s, 3, Len(@s)-3)) End
PRINT @i