将“1 1/2”之类的数字转换为十进制
Converting a number like "1 1/2" to decimal
我创建了一个函数来删除字符并保留数字,但我对 x/y 值有疑问,例如 1 1/2,这里应该是 1.5。目前我有这个它会做百分比部分,但它不会包括第一个数字......即..5而不是1.5。我怎样才能做到这一点?这是我的...
CASE
When (@input + ' ') like '%/%' and @input not like '%+%'
Then cast(cast(SUBSTRING ((@input + ' '), CHARINDEX('/',(@input + ' '))-1,1) as decimal (4,2))
/ cast(SUBSTRING ((@input + ' '), CHARINDEX('/',(@input + ' '))+1,1) as decimal (4,2)) as float)
When @input not like '%+%'
Then @input
END
另一个技巧是滥用动态 sql 来计算方程。
示例:
DECLARE @input VARCHAR(10) = '1 1/2';
DECLARE @result DECIMAL(5,2);
DECLARE @sql NVARCHAR(100) = 'select @res=('+replace(@input,' ', '+1.0*')+')';
DECLARE @params NVARCHAR(100) = N'@res DECIMAL(5,2) OUTPUT';
EXEC SP_EXECUTESQL @sql, @params, @result OUTPUT;
SELECT @result AS result;
result
1.50
db<>fiddle here
我创建了一个函数来删除字符并保留数字,但我对 x/y 值有疑问,例如 1 1/2,这里应该是 1.5。目前我有这个它会做百分比部分,但它不会包括第一个数字......即..5而不是1.5。我怎样才能做到这一点?这是我的...
CASE
When (@input + ' ') like '%/%' and @input not like '%+%'
Then cast(cast(SUBSTRING ((@input + ' '), CHARINDEX('/',(@input + ' '))-1,1) as decimal (4,2))
/ cast(SUBSTRING ((@input + ' '), CHARINDEX('/',(@input + ' '))+1,1) as decimal (4,2)) as float)
When @input not like '%+%'
Then @input
END
另一个技巧是滥用动态 sql 来计算方程。
示例:
DECLARE @input VARCHAR(10) = '1 1/2'; DECLARE @result DECIMAL(5,2); DECLARE @sql NVARCHAR(100) = 'select @res=('+replace(@input,' ', '+1.0*')+')'; DECLARE @params NVARCHAR(100) = N'@res DECIMAL(5,2) OUTPUT'; EXEC SP_EXECUTESQL @sql, @params, @result OUTPUT; SELECT @result AS result;
result |
---|
1.50 |
db<>fiddle here