如果值小于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'附近的语法不正确”。 我该怎么办?
答案 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