mysql - 添加由分隔符分隔的非 1NF 格式的值的函数/过程

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

任何指示都会有帮助。提前致谢。

最佳答案

您可以使用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 ;

关于mysql - 添加由分隔符分隔的非 1NF 格式的值的函数/过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29809851/

相关文章:

r 函数调用带有子集的 lm

java - SqlDelight 不为 SQL 语句生成 SQL 查询字符串

php - 合并相似的数组,PHP 或 MySQL

php - 恢复具有特定 ID 的 MySQL 项目

javascript - 使用 ":checked"切换显示和隐藏 &lt;iframe&gt;

mysql - 存储过程在应该返回任何值时没有返回任何值(MySQL)

sql - XACT_ABORT 并不总是在出错时回滚事务。它什么时候做?

mysql - MySQL 中何时使用单引号、双引号和反引号

php - Laravel - 用户 'root' 已经有超过 'max_user_connections' 个事件连接

javascript - 字符串匹配(Javascript)