Как суммировать значение поля MySQL varchar - PullRequest
0 голосов
/ 28 января 2019

У меня есть поле Varchar для total_amount, поле имеет что-то вроде 1 + 1 + 1

Мне нужно сложить этот столбец.

1 Ответ

0 голосов
/ 28 января 2019

Вот мое решение, которое основано на функции для разделения строки, которую я нашел в нескольких местах в сети, поэтому я не уверен, за кого кредитовать, и на функции, которая использует функцию разделения для вычисления итога

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 ;

Чтобы использовать его, сделайте что-то вроде

SELECT CalcTotal(total_amount) 
FROM some_table

Обратите внимание, что я установил максимальную длину varchar равным 255 и принял только целочисленные значения, но это, конечно, можно изменить

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...