В mysql пользовательская функция, как установить динамический тип возвращаемых данных - PullRequest
0 голосов
/ 08 января 2019

В определенной пользователем функции 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 голосов
/ 08 января 2019

Прежде всего, FORMAT возвращает строку, поскольку она может содержать запятые (разделители тысяч). Итак, вы можете как вернуть VARCHAR(99). К тому же, вы также можете кормить в строках, если ваши цифры действительно DOUBLE.

Обратите внимание, что при переходе от DECIMAL(m,n) к DOUBLE, затем округлении (через FORMAT) d до некоторого числа десятичных знаков выполняется 2 округления, на один больше, чем вам действительно нужно.

Еще одно примечание: во во многих ситуациях в MySQL (не во всех) строка, содержащая числовые данные, так же хороша, как DOUBLE или DECIMAL. (Заметное исключение: WHERE varchar_col = 1234 не сможет использовать INDEX(varchar_col).)

...