如何从文本中提取并从另一个查询中匹配

时间:2017-04-25 15:56:18

标签: sql regex join teradata

我有一张机场序列表(AIRPRT_SERIES),如SFO / ATL / GRU或PIT / ATL / GIG / VIX。我想找到这个字段中的所有匹配项(在本例中为ATL / GRU和ATL / GIG),这些匹配项与我有这些航班的另一个表匹配(Hub:ATL Spoke:GIG)。问题是我不知道如何通过或加入我的表来实现这一目标。

这是一个查询,可以完成我想要的一半。问题是两个表中没有匹配的字段(除了我提取它们之外)所以我不知道如何进行连接。

select 
*
from LEG_OD leg
inner join myMarkets mkts
on leg.nondir=mkts.nd_arp -- Current condition but not what I want/need
WHERE 
        REGEXP_SIMILAR(AIRPRT_SERIES ,  '[A-Z]{3}/('||mkts.SPOKE||'/'||mkts.Hub||'/|'||mkts.Hub||'/'||mkts.Spoke||'/)[A-Z]{3}' )=1  

AND 
 leg.year_month  BETWEEN '20160101' AND '20160112' 

LEG_OD字段:AIRPRT_SERIES,Passengers,nondir

myMarkets :Hub,Spoke,Distance,nd_arp

我想保留REGEXP_SIMILAR条件,因为这是更大查询的一部分。

1 个答案:

答案 0 :(得分:0)

您需要使用STRTOK_SPLIT_TO_TABLE。使用LEG_OD表,我们可以从airport_series中分离出各个元素。

select
d.* from TABLE (strtok_split_to_table (LEG_OD.<some sort of id column>,LEG_OD.AIRPORT_SERIES, '/')
returns (outkey integer, tokennum integer,toke varchar(3) character set unicode)) as d
order by 1,2

这将为airport_series列中的每个元素提供一行。

如果我正确理解您的数据,您可以加入这些值。