mysql - 在mysql用户定义函数中如何设置动态返回数据类型

标签 mysql decimal finance mysql-function

在mysql用户自定义函数中如何设置基于函数执行的动态返回数据类型。

DELIMITER $$
CREATE FUNCTION financeNumberFormat(number double) RETURNS DECIMAL(10,5)
    DETERMINISTIC
BEGIN
    DECLARE decpoint int(10);

    SELECT c_maximum_decimal_values INTO decpoint
    FROM mst_xxx
    WHERE 1 LIMIT 1;    


    SET decpoint = FORMAT(number,decpoint); 

 RETURN (decpoint);
END

我的输出如下所示。

financeNumberFormat(5.345)  
5.000

小数点可能会有所不同,因此返回值应基于该小数点。有没有办法实现它。?提前致谢。

最佳答案

首先,FORMAT 返回一个字符串,因为它可以包含逗号(千位分隔符)。因此,您可以返回 VARCHAR(99)。出于同样的原因,您也可以输入字符串,除非您的数字确实是 DOUBLE

请注意,从 DECIMAL(m,n)DOUBLE,然后四舍五入(通过 FORMAT)d 到小数位数正在进行 2 次舍入,比您真正需要的多一次。

另一个注意事项:在 MySQL 的许多情况下(不是全部),包含数字数据的字符串与 DOUBLEDECIMAL 一样好. (值得注意的异常(exception)是 WHERE varchar_col = 1234 将无法使用 INDEX(varchar_col)。)

关于mysql - 在mysql用户定义函数中如何设置动态返回数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54091905/

相关文章:

MySql:将 float 转换为十进制数会产生比存储在 back.sql 文件中更多的十进制数

Python numpy 类型小数位数

excel - 历史上的雅虎金融 API 再次出现在 Fritz 上?

mysql - 使用 NOT IN 运算符在 MySql 中选择问题?

matplotlib - 在 matplotlib 图中将小数点更改为逗号

php - 错误消息不适用于 PHP 用户检查

r - 来自 B3/BM&F Bovespa 的网页抓取

c# - C# 中的自定义表达式解析器

php - MySQL错误参数

mysql - 简单 : What makes this query inefficent?