为什么我需要在查询中使用CAST()?

时间:2014-01-10 06:07:50

标签: mysql casting

可能,这是一个众所周知的问题,但我在文档中找不到答案。 如果我运行这些查询:

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;

为什么会这样?我该怎么读?

2 个答案:

答案 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包含两个部分:PrecisionScale。因此,您的部分查询将如下所示:

CAST(@next AS DECIMAL(2,2))

Precision表示为值存储的有效位数。
Scale表示小数点后可存储的位数。

Read More