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

时间:2019-01-08 12:33:13

标签: 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

下降点可能会有所不同,因此返回值应基于该小数点。有办法实现吗?预先感谢。

1 个答案:

答案 0 :(得分:1)

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

请注意,从DECIMAL(m,n)DOUBLE,然后(通过FORMAT)舍入到小数点后的位数进行了2次舍入,比实际需要的舍入多了一个。 >

另一注:在MySQL的很多情况下(不是全部),包含数字数据的字符串与DOUBLEDECIMAL一样好。 (值得注意的例外是WHERE varchar_col = 1234将无法使用INDEX(varchar_col)。)