You can use string functions like INSTR(), LEFT(), RIGHT(), LENGTH() for this purpose.
create table market(id int, col varchar(100), exchange varchar(100));
insert into market values
(1, 'EOS/ETH', 'bittrex'),
(2, 'EOS/BTC', 'other'),
(3, 'EOS/BTC', 'bittrex'),
(4, 'XMR/BTC', 'other'),
(5, 'LTC/BTC', 'other'),
(6, 'DASH/ETH', 'other');
select *
from market t1
where right(t1.col, length(t1.col) - instr(t1.col, '/')) IN ('ETH','BTC')
and exchange = 'bittrex'
and exists (select 1
from market t2
where left(t2.col, instr(t2.col, '/')) = left(t1.col, instr(t1.col, '/'))
and right(t2.col, length(t2.col) - instr(t2.col, '/')) IN ('ETH','BTC')
and exchange = 'bittrex'
group by left(t2.col, instr(t2.col, '/'))
having count(*) > 1)
id | col | exchange
-: | :------ | :-------
1 | EOS/ETH | bittrex
3 | EOS/BTC | bittrex
dbfiddle here
As Rick James has pointed out on his comments you can use SUBSTRING_INDEX() and get the same result.
select *
from market t1
where substring_index(t1.col, '/', -1) IN ('ETH','BTC')
and exchange = 'bittrex'
and exists (select 1
from market t2
where substring_index(t2.col, '/', 1) = substring_index(t1.col, '/', 1)
and substring_index(t1.col, '/', -1) IN ('ETH','BTC')
and exchange = 'bittrex'
group by substring_index(t1.col, '/', -1)
having count(*) > 1)
id | col | exchange
-: | :------ | :-------
1 | EOS/ETH | bittrex
3 | EOS/BTC | bittrex
dbfiddle here