删除 MySQL 中加号后的所有内容
Remove everything after a plus in 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;
但这似乎是 'obviously' 错误的事情。正则表达式会很好,但据我所知 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
;
但由于 table 很大,我想知道是否有更有效或更易于维护的解决方案。
使用substring_index()
:
select substring_index(various(functions(here(...))), '+', 1) as foo, count(*) ct
from table
group by foo
having ct > 1;
我在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;
但这似乎是 'obviously' 错误的事情。正则表达式会很好,但据我所知 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
;
但由于 table 很大,我想知道是否有更有效或更易于维护的解决方案。
使用substring_index()
:
select substring_index(various(functions(here(...))), '+', 1) as foo, count(*) ct
from table
group by foo
having ct > 1;