MySQL 数据类型声明中 DECIMAL(x, y) 中 x 和 y 的边界值是多少?
我有以下 UDF
drop function if exists getCurrency$$
create function getCurrency(dt datetime, x decimal(19,4), y decimal(19, 4))
returns decimal(10,4) reads sql data
begin
declare currencyval decimal(10,4);
/* Some conditions */
select case when dt = "2000-12-31" then 0 else round((x/y), 4) into currencyval;
return currencyval;
end$$
有时此 UDF 会引发数据截断错误。 我可以解决这个问题,但在此之前我想要一些有关 Decimal 数据类型以及参数中 10、4 的含义的信息。
如果你能给出一些带有边界条件的例子就好了。
I have got the following UDF
drop function if exists getCurrency$
create function getCurrency(dt datetime, x decimal(19,4), y decimal(19, 4))
returns decimal(10,4) reads sql data
begin
declare currencyval decimal(10,4);
/* Some conditions */
select case when dt = "2000-12-31" then 0 else round((x/y), 4) into currencyval;
return currencyval;
end$
Sometimes this UDF throws Data truncation error.
I can resolve the issue but the before even that I want some information regarding the Decimal data type and the significance of 10, 4 in the parameters.
It would be good if you give some examples with the boundary conditions.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
10, 4
表示点前 6 位(整数部分)和点后 4 位(小数部分)。因此,您可以返回的最大可能数字是
999999.9999
在您的特定情况下,不可能说出什么值是
x
和/或y
的边界>,但您可以检查返回值 (currencyval
) 是否超出-999999.9999 .. 999999.9999
范围。顺便说一句,如果您询问
DECIMAL (x, y)
记录中的x
和y
,则:x = 1。 .65
y = 0..30 && y <= x
参考文献:
DECIMAL
、NUMERIC
10, 4
means 6 digits (integer part) before point and 4 after (fractional part).So the biggest possible number you can return is
999999.9999
In your particular case it is not possible to say what values are boundary for
x
and/ory
, but you can check if the return value (currencyval
) is out of-999999.9999 .. 999999.9999
range.Btw, if you're asking about
x
andy
inDECIMAL (x, y)
records, then:x = 1..65
y = 0..30 && y <= x
References:
DECIMAL
,NUMERIC