【发布时间】:2017-04-25 15:56:18
【问题描述】:
我有一张包含机场序列 (AIRPRT_SERIES) 的表格,例如 SFO/ATL/GRU 或 PIT/ATL/GIG/VIX。我想在此字段中找到所有匹配项(在本例中为 ATL/GRU 和 ATL/GIG),这些匹配项与我拥有这些航班的另一个表(集线器: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 条件,因为这是更大查询的一部分。
【问题讨论】:
-
您当前的 RegEx 将只匹配四个机场,中间是中心/辐条组合,对吗?
-
是的,没错。我有另一个未包含在此查询中的子句以使其更清晰(如果解决方案适用于此,它将适用于其他子句)。我最感兴趣的是如何将值传递给正则表达式。
-
您可以将 Andrew 的方法与 StrTok 一起使用,但由于机场的位置是已知/固定的,您最好使用 Substring 提取它。并且因为订单中心/辐条或辐条/集线器未知,您可以应用 Least/Greatest:` ON Greatest(Substr(AIRPRT_SERIES, 5,3), Substr(AIRPRT_SERIES, 9,3)) = Greatest(hub,spoke) AND Least(Substr(AIRPRT_SERIES, 5,3), Substr(AIRPRT_SERIES, 9,3)) = Least(hub,spoke)`