Warum verursacht das Konvertieren des Datentyps von Float zu String unterschiedliche Ergebnisse bei der Ausführung derselben Abfrage? /> < /blockquote>
Der Funktionscode lautet wie folgt: < /p>
Code: Select all
DELIMITER //
CREATE FUNCTION F_AUTO_DIGIT_CONV (
`i_num` DECIMAL(30,6),
`i_point` int
) RETURNS VARCHAR(50)
BEGIN
DECLARE v_colname VARCHAR(50);
-- Handling NULL input
IF i_num IS NULL THEN
RETURN NULL;
END IF;
-- Automatically convert units according to numerical value
SET v_colname = (CASE
WHEN i_num -1000000000 AND i_num -1000000 AND i_num < 1000000 THEN
CAST(truncate(i_num, i_point) AS CHAR)
WHEN i_num >= 1000000 AND i_num < 1000000000 THEN
CONCAT(CAST(truncate(i_num / 1000000, i_point) AS CHAR), 'Million')
WHEN i_num >= 1000000000 THEN
CONCAT(CAST(truncate(i_num / 1000000000, i_point) AS CHAR), 'Billion') -- Fix spelling errors
ELSE
CAST(ROUND(i_num, i_point) AS CHAR)
END);
-- Handles leading or negative dot cases (e.g. ".5" -> "0.5" / "-.5" -> "-0.5")
RETURN (CASE
WHEN v_colname LIKE '.%' THEN CONCAT('0', v_colname)
WHEN v_colname LIKE '-.%' THEN REPLACE(v_colname, '-.', '-0.')
ELSE v_colname
END);
END//
DELIMITER ;
< /code>
Die Ergebnisse werden wie folgt verglichen (das gewünschte Ergebnis ist das zweite, aber die Funktion gibt einen Fehler zurück) < /p>
Funktion Ausführung (Float -Typ): < /p>
select F_AUTO_DIGIT_CONV(122046010.4900,3)
Direkte Anfrage (in den Zeichenfolge -Typ konvertieren):
Code: Select all
select CONCAT(CAST(truncate(122046010.4900 / 1000000000, 3) AS CHAR), ‘Billion’)
Warum sind die Ergebnisse dieser 2 -mal unterschiedlichen?