可能,这是一个众所周知的问题,但我在文档中找不到答案。 如果我运行这些查询:
SELECT @next := 2, @amount := 1;
SELECT @next := 0.2, @amount := 0.1, @result := @next - @amount;
我会错的@result =“0”
如果我再次运行第二个查询,结果将是正确的。
如果我在第二个查询中使用类型转换并再次运行两个查询,结果也是正确的。即,
SELECT @next := 0.2, @amount := 0.1, @result := CAST(@next AS DECIMAL(2,2)) - @amount;
为什么会这样?我该怎么读?
答案 0 :(得分:2)
我认为发生的事情是你首先设置@next:= 2,@ amount = 1
然后使@next和@amount类型为int。
所以当你在@next上分配@next:= 0.2,@ amount:= 0.1时,@ next取值为零,@ amount也是如此。
但在此选择运行之后@next将类型更改为十进制。
要了解到底发生了什么,请试试这个
SELECT @next := 2, @amount := 1;
SELECT @next := 0.2, @amount := 0.1, @next, @amount, @result := @next - @amount;
SELECT @next,@amount;
所以不必CAST,只需将您的第一个语句设置为
即可SELECT @next := 2.0, @amount := 1.0;
并且所有内容都将以小数开头,一切都应按预期工作。
答案 1 :(得分:0)
强制转换表达式与SQL CONVERT具有相似的语义 表达。强制转换表达式用于转换一种类型的值 成为另一种类型的价值。
DECIMAL
包含两个部分:Precision
和Scale
。因此,您的部分查询将如下所示:
CAST(@next AS DECIMAL(2,2))
Precision
表示为值存储的有效位数。
Scale
表示小数点后可存储的位数。