У меня есть запрос в MySQLУдалить все после того, как плюс в MySQL
select various(functions(here(...))) foo, count(*) ct
from table
group by foo
having ct > 1;
, который выглядит для дублирования данных. Я хотел бы изменить запрос, чтобы удалить плюсовые знаки и все, что следует за ними из foo, так что если various(functions(here(...)))
дает foo+bar
, я получаю только foo
. (Если знак плюса не встречается, он остается неизменным.)
Каков наилучший способ сделать это? Я могу использовать replace
select if(locate("+", various(functions(here(...))))>0, left(various(functions(here(...))), locate("+", various(functions(here(...)))) - 1), various(functions(here(...)))) foo, count(*) ct
from table
where conditions
group by foo
having ct > 1;
, но это, кажется, как «очевидно» неправильные вещи. Regex было бы неплохо, но они не существуют в MySQL, насколько я знаю. Подзапрос делает это немного менее громоздким
select if(locate("+", bar)>0, left(bar, locate("+", bar)-1), bar) foo
from table
left join (
select pkey, various(functions(here(...))) bar
from table
where conditions
) subtable using(pkey)
group by foo
having ct > 1
;
но таблица большая, я хотел бы знать, если есть более эффективный и более ремонтопригодны решение.
Так просто! Извините, я пропустил это. – Charles