Mysql
如何過濾拆分列值?
我是 SQL 世界的新手,我只使用簡單的插入、選擇、刪除和更新進行編碼。
所以……我有一個名為“市場”列的表格,其中包含一個加密貨幣列表……就像這樣……
market ------- EOS/ETH EOS/BTC XMR/BTC LTC/BTC DASH/ETH ...
我需要從該表中選擇 *,其中:
- ‘/’ 之前的字元串彼此相等,但 ‘/’ 之後的字元串是 ETH 和 BTC。
- 我也想過濾一個名為 exchange 的列。在此範例中,將是所有這些硬幣,其中 exchange = ‘bittrex’
在此範例中,結果將是:
EOS/ETH EOS/BTC
任何人都可以幫忙嗎?
為此,您可以使用INSTR()、LEFT()、RIGHT()、LENGTH() 等字元串函式。
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)
編號 | 上校 | 交換 -: | :------ | :------- 1 | EOS/ETH | 比特雷克斯 3 | EOS/比特幣 | 比特雷克斯
dbfiddle在這裡
正如 Rick James 在他的評論中指出的那樣,您可以使用 SUBSTRING_INDEX() 並獲得相同的結果。
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)
編號 | 上校 | 交換 -: | :------ | :------- 1 | EOS/ETH | 比特雷克斯 3 | EOS/比特幣 | 比特雷克斯
dbfiddle在這裡