【问题标题】:Divide two integers to get a float in MySQL在 MySQL 中将两个整数相除以获得浮点数
【发布时间】:2014-09-29 16:11:51
【问题描述】:

我正在 MySQL 中处理一个用户定义的函数,它接受一个整数 (mediumint) 并将其除以 100(即 10785 / 100 = 107.85)。提供的整数是一个称为时间的参数。我试过了

DECLARE dtime FLOAT;
SET dtime = time / 100;
DECLARE ftime VARCHAR(10);

这会导致错误,我假设是因为我将两个整数相除并将其分配给浮点数

MySQL said: #1064 - You have an error in your SQL syntax; check the manual that 
corresponds to your MySQL server version for the right syntax to use near 
'DECLARE ftime VARCHAR(10);

我也试过了

SET dtime = CAST(time as FLOAT) / 100.0;

但这会引发错误,因为您似乎无法将数字转换为浮点数。最后,我尝试使用小数

DECLARE dtime DECIMAL(10,10);
SET dtime = CAST(time AS decimal(10,10)) / CAST(100 as decimal(10,10);
DECLARE ftime VARCHAR(10);

但会引发相同的错误 (near 'Declare ftime...)。实现此目的的正确方法是什么?

【问题讨论】:

标签: mysql floating-point user-defined-functions integer-division


【解决方案1】:

你可以试试这个吗?

SELECT CAST(time AS decimal) / CAST(100 AS decimal)

【讨论】:

  • 同样的错误。 DECLARE dtime DECIMAL; SET dtime = cast(time as decimal) / cast(100 as decimal); 错误near 'DECLARE ftime VARCHAR(10);
  • 见上面的答案。我以为 declare 是在剪辑的开头。
【解决方案2】:

Please read the documentation for the DECLARE statement syntax.

引用参考手册(以上链接):

DECLARE 只允许在BEGIN ... END 复合语句中使用,并且必须在其开头,在任何其他语句之前

声明必须遵循一定的顺序。游标声明必须出现在处理程序声明之前。变量和条件声明必须出现在游标或处理程序声明之前。

【讨论】:

  • 乐于助人。如果这有用,请投票(和/或接受它;))
  • 我一直在努力接受它。被告知要等5分钟。我现在是 30 秒 :)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-14
  • 1970-01-01
  • 1970-01-01
  • 2012-07-27
相关资源
最近更新 更多