首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >以分隔符分隔的非1NF格式添加值的函数/过程

以分隔符分隔的非1NF格式添加值的函数/过程
EN

Stack Overflow用户
提问于 2015-04-23 06:11:21
回答 1查看 33关注 0票数 0

我需要一个用MySQL编写的函数来将数字(正数和负数)相加,这些数字位于单个列中,并由分隔符分隔。本例中的分隔符是"?“。该函数还需要忽略不是数字、不是减号("-")、不是句点(".")和不是分隔符(例如,"?")的无关字符。

例如,名为"BalAdjAmt“的列,其值可以是:

代码语言:javascript
复制
500.00?500.00?-1000.00
500.00
500.00?500.00
500.00?500.00?-1000.00 B

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

代码语言:javascript
复制
0
500.00
1000.00
0

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

EN

回答 1

Stack Overflow用户

发布于 2015-04-24 23:31:14

您可以使用common_schema来简化这项工作。然后您可以创建如下所示的函数:

代码语言:javascript
复制
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 ;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29809851

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档