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
我有一个 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