Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何对MySQL varchar字段值求和_Mysql_Sql - Fatal编程技术网

如何对MySQL varchar字段值求和

如何对MySQL varchar字段值求和,mysql,sql,Mysql,Sql,我有一个Varchar字段表示总金额,这个字段有点像1+1+1 我需要对这一列求和。这是我的解决方案,它基于一个函数,用于拆分我在网上几个地方找到的字符串,因此我不确定该归功于谁,以及一个使用拆分函数计算总数的函数 DELIMITER $$ CREATE FUNCTION `CalcTotal`(input VARCHAR(255)) RETURNS int(11) DETERMINISTIC BEGIN DECLARE pos int; DECLARE result int; D

我有一个Varchar字段表示总金额,这个字段有点像1+1+1


我需要对这一列求和。

这是我的解决方案,它基于一个函数,用于拆分我在网上几个地方找到的字符串,因此我不确定该归功于谁,以及一个使用拆分函数计算总数的函数

DELIMITER $$

CREATE FUNCTION `CalcTotal`(input VARCHAR(255)) RETURNS int(11)
DETERMINISTIC
BEGIN
  DECLARE pos int;
  DECLARE result int;
  DECLARE value_str VARCHAR(255);

  SET pos = 1;
  SET result = 0;
  SET value_str = '0';

  WHILE value_str <> '' DO
    SET value_str = SPLIT_STR(input, '+', pos);
    IF value_str <> '' THEN
      SET result = result + value_str;
      SET pos = pos + 1;
    END IF;
  END WHILE;

  RETURN (result);
END$$

CREATE FUNCTION `SPLIT_STR`(x VARCHAR(255), delim VARCHAR(12), pos INT) RETURNS varchar(255)
DETERMINISTIC
BEGIN 
  RETURN REPLACE(SUBSTRING(SUBSTRING_INDEX(x, delim, pos),
         LENGTH(SUBSTRING_INDEX(x, delim, pos -1)) + 1), delim, '');
END$$

DELIMITER ;

请注意,我已将varchar的最大长度设置为255,并仅假设为整数值,但这当然可以修改

MySQL没有计算算术表达式的能力。您需要使用“+”拆分字符串并计算sum@JIJOMONK.A,但这并不明显,是吗?你能解释一下如何拆分“+”吗@谢谢你的回答,它解决了我的问题@乔金
SELECT CalcTotal(total_amount) 
FROM some_table