Столбец MySQL Sum со значениями, разделенными дефисом

Мне нужно суммировать столбец стоимости с разделением дефисом. Я знаю, что обычно это делается с помощью sum(), но в этом случае мне нужно избавиться от "-", чтобы я мог суммировать весь столбец. Как показано на изображении ниже. Это мой пример того, как выглядят данные. Не в каждой строке есть дефис. Поэтому, пожалуйста, укажите мне, как это сделать в mySQL.

Таблица данных.

введите здесь описание изображения

Согласно изображению. Я ожидаю, что значение в конце bk_rcost составит от 2012-10-09 20:29:44 до 2012-10-28 22:33:58, равное 203396 (если я правильно суммировал).


person Wilf    schedule 08.12.2012    source источник
comment
Вы действительно храните числовые значения с дефисами? Я думаю, вам нужно подумать о перепроектировании стола.   -  person Taryn    schedule 08.12.2012
comment
@bluefeet, спасибо за ваше предложение, но теперь мне нужно решение.   -  person Wilf    schedule 08.12.2012
comment
Конечно нужно, поэтому и спросил. Но предложение - лучшее решение. Если вы используете MySQL, вы должны пойти по пути MySQL.   -  person Sir Rufo    schedule 08.12.2012
comment
Тем не менее, как вы хотите, чтобы сумма была? Какой должна быть сумма 5500 и 5000-5900? Должна ли она быть 5500+5000+5900 или 5500+5000 или 5500+50005900?   -  person TJ-    schedule 08.12.2012
comment
У вас есть три числа, оканчивающиеся на 9, и все остальные, оканчивающиеся на 0. Ваша сумма должна заканчиваться на 7.   -  person Quassnoi    schedule 08.12.2012


Ответы (1)


Как они писали ранее, было бы лучше, если бы Вы изменили дизайн своей базы данных, но если у Вас нет такой возможности, эта функция должна Вам помочь.

delimiter //
DROP function IF EXISTS explode_sum//
create function explode_sum(source varchar(255))
returns integer
deterministic
begin
    declare p int;
    declare l int;
    declare r int;
    declare t int;
    set p = 1;
    set r = 0;
    repeat
        set l = locate('-', source, p);
        if l=0 then
            if p=1 then
                set r = r + source;
            else
                set r = r + substr(source, p, length(source)-p+1);
            end if;
        else
            set r = r + substr(source, p, l-p);
        end if;
        set p = l+1;
    until l=0
    end repeat;
    return(r);
end//
delimiter ;

Вы можете использовать как любую другую функцию mysql, так как разделитель жестко запрограммирован

select explode_sum(bk_rcost) from table;
person Gustek    schedule 08.12.2012