将“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