在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可能会变化,因此返回值应基于该小数点。有办法实现吗。?提前谢谢。

最佳答案

首先,FORMAT返回一个字符串,因为它可以包含逗号(数千个分隔符)。所以,您可以返回VARCHAR(99)。同样,你也可以输入字符串,除非你的数字真的DOUBLE
注意,从DECIMAL(m,n)DOUBLE,然后四舍五入(通过FORMAT)d到小数点后的某个数字就是做两次四舍五入,比您真正需要的多一次。
另一个注意事项:在MySQL中的许多情况下(不是全部),包含数字数据的字符串与DOUBLEDECIMAL一样好。(值得注意的例外是WHERE varchar_col = 1234将无法使用INDEX(varchar_col)

07-24 09:16