если слово существует, удалите - PullRequest
0 голосов
/ 14 ноября 2018

У меня есть список имен ETF и их тикеров, однако похоже, что имя ETF иногда дублируется из-за добавления слова «etf» в конце:

Ishares Global Tech
Ishares Global Tech etf
Ishares Edge Msci Usa Momentum Factor
Ishares Edge Msci Usa Momentum Factor etf

Как мне написать так, что если имя ETF оканчивается на "etf", то извлечение извлекается из вывода?

В настоящее время мой запрос выглядит примерно так:

select initcap(display_name) name, upper(symbol) as symbol, sum(amount) aum 
from table 
where regexp_instr(lower(display_name),'isha?r?e?s')>0
group by 1,2

Ответы [ 3 ]

0 голосов
/ 14 ноября 2018

Вы можете использовать ЗАМЕНУ, как показано ниже:

select REPLACE(display_name,' ETF','')
from table
where RIGHT(display_name,4) = ' ETF'
0 голосов
/ 14 ноября 2018

Я бы использовал regex_replace

SELECT REGEXP_REPLACE(display_name, '^.*(etf)$', '', 'i')
from table 

Я понял, что вы хотите отфильтровать все, что заканчивается 'etf', и тогда вы можете сделать

select initcap(display_name) name, upper(symbol) as symbol, sum(amount) aum 
from table 
where display_name !~* '^.*etf$'
group by 1,2
0 голосов
/ 14 ноября 2018

Предполагая, что ' etf' происходит только один раз, вы можете сделать:

select split_part(display_name, ' etf', 1)

В качестве альтернативы я бы выбрал case:

select (case when display_name like '% etf'
             then left(display_name, len(display_name) - 4)
             else display_name
        end) as new_display_name
...