我有下表,分别是“ Column1”,“ Column2”和“ Column3”
Column1 Column2 Column3
ABC - Loading 22 3815
ABC - Loading of Page 49 5131
Enter -CDE - Any action with target 74 2798
Exit -CDE - Any action with target2 35 3351
ACE Wireless - loading1 12 9910
All -ACE Wireless - Click1 49 6060
GATE - click or touch on egh 76 6061
GATE - click or touch on plans 100 6020
HUB - loading of def 90 4854
All -HUB - Click or Touch on poe 82 2754
我需要创建“ NewColumn”,在其中我需要从列表(CDE,ACE,GATE,HUB)中提取特定的字符串,并针对“ Column1”进行查找,如下所示:
Column1 Column2 Column3 NewColumn
ABC - Loading 22 3815 ABC
ABC - Loading of Page 49 5131 ABC
Enter -CDE - Any action with target 74 2798 CDE
Exit -CDE - Any action with target2 35 3351 CDE
ACE Wireless - loading1 12 9910 ACE
All -ACE Wireless - Click1 49 6060 ACE
GATE - click or touch on egh 76 6061 GATE
GATE - click or touch on plans 100 6020 GATE
HUB - loading of def 90 4854 HUB
All -HUB - Click or Touch on poe 82 2754 HUB
请注意,查询的关键字不会重复。
我尝试了各种命令,例如EXTRACT,SUBSTRING等。但是我看过的所有命令都不适合我的特定要求。
我正在RedShift SQL中寻找有关如何使用列表创建“ NewColumn”的指南,该列表从“ Column1”中查找关键字。
答案 0 :(得分:1)
这将找到与问题列表中的一个值匹配的第一个匹配项。
select
Column1,
Column2,
Column3,
regexp_substr(Column1, 'CDE|ACE|GATE|HUB') AS NewColumn
from
your_table;
编辑: 以容纳@TimBiegeleisen
select
Column1,
Column2,
Column3,
regexp_substr(
Column1,
(SELECT LIST_AGG(item, '|') FROM table_of_codes)
) AS NewColumn
from
your_table;
或者...
select
your_table.Column1,
your_table.Column2,
your_table.Column3,
table_of_codes.item
from
your_table
inner join
table_of_codes
on yourTable.col3 LIKE '%' + table_of_codes.item + '%'
;
或许多这样的变体。
(表table_of_codes
在每个要搜索的代码中包含一行。)