功能/过程以非分隔符分隔的非1NF格式添加值

时间:2015-04-22 22:11:21

标签: mysql function stored-procedures recursive-query

我需要一个用MySQL编写的函数来将数字加在一起(正面和负面),这些数字在一列中并用分隔符分隔。在这种情况下,分隔符是"?"。该函数还需要忽略非数字的无关字符,而不是减号(" - "),而不是句点("。"),而不是分隔符(例如,"?")。

一个例子是名为" BalAdjAmt"其价值可能是:

500.00?500.00?-1000.00
500.00
500.00?500.00
500.00?500.00?-1000.00 B

在此数据集上运行时,函数的结果应为:

0
500.00
1000.00
0

任何指针都会有所帮助。提前谢谢。

1 个答案:

答案 0 :(得分:0)

您可以使用common_schema来促进工作。然后你可以创建一个这样的函数:

DELIMITER $$

DROP FUNCTION IF EXISTS `fn_test`$$

CREATE FUNCTION `fn_test`(`_value` VARCHAR(500))
RETURNS DECIMAL(7,2)
BEGIN
    DECLARE `_iteration`, `_num_tokens` INT UNSIGNED DEFAULT 0;
    DECLARE `delim` CHAR(1) DEFAULT '?';
    DECLARE `_return` DECIMAL(7,2) DEFAULT 0;

    SET `_num_tokens` := (SELECT `common_schema`.`get_num_tokens`(`_value`, `delim`));

    WHILE `_iteration` < `_num_tokens` DO
        SET `_iteration` := `_iteration` + 1;
        SET `_return` := `_return` + (SELECT CAST(`common_schema`.`split_token`(`_value`, `delim`, _iteration) AS DECIMAL(7,2)));
    END WHILE;    

    RETURN `_return`;
END$$

DELIMITER ;