SQL case 表达式中未提取小数

Decimals not being picked up in SQL case expression

我有一个 case 表达式并且整数工作正常但是当它到达小数点时它返回 null,所以当 @inputUnits = '1' 和 @unitInCase = 2 @setUnit = 'Two' 但是当@unitInCase = .1 @setUnit = NULL 不确定发生了什么。

DECLARE
    @inputUnits varchar(50),
    @unitInCase numeric,
    @setUnit varchar(50)

SET @inputUnits = '1'
SET @unitInCase  =  .1
SET @setUnit =
    CASE
        WHEN @inputUnits  = '1' THEN 
            CASE 
                WHEN @unitInCase= .1 THEN 'One' 
                WHEN @unitInCase= 2 THEN 'Two'
                WHEN @unitInCase= 3 THEN 'Three'
                WHEN @unitInCase = 4 THEN 'Four'
            END 
        WHEN @inputUnits = '2' THEN 
            CASE 
                WHEN @unitInCase= .1 THEN 'One' 
                WHEN @unitInCase = .2 THEN 'Two'
                WHEN @unitInCase= .3 THEN 'Three'
                WHEN @unitInCase= .4 THEN 'Four'
            END
    END

您需要指定所需的数字类型,例如 numeric(10,2) 因此您的代码应以 (say)

开头
DECLARE
    @inputUnits varchar(50),
    @unitInCase numeric(10,2),

有关数字和小数数据类型(它们是同义词)的信息,请参阅 https://docs.microsoft.com/en-us/sql/t-sql/data-types/decimal-and-numeric-transact-sql?view=sql-server-ver15。一般而言,第一个数字表示您希望跟踪的位数(小数点两边),而第二个数字是小数点后的位数。

前后代码见db<>fiddle

在下面的示例中,它显示了如果您不设置小数位数和精度会发生什么情况。

DECLARE @x numeric;
SET @x = 1.234567890;
SELECT @x;
-- Result is 1