1

在 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

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

4

1 回答 1

1

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

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

另一个注意事项:在MySQL 的许多DOUBLE情况下(不是全部),包含数字数据的字符串与or一样好DECIMAL。(值得注意的例外是 with WHERE varchar_col = 1234will fail to use INDEX(varchar_col)。)

于 2019-01-08T19:00:14.913 回答