【问题标题】:How to extract from Text and match from another query如何从文本中提取并从另一个查询中匹配
【发布时间】: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)`

标签: sql regex join teradata


【解决方案1】:

您需要使用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 列中的每个元素提供一行。

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

【讨论】:

    猜你喜欢
    • 2021-03-25
    • 1970-01-01
    • 2022-11-18
    • 1970-01-01
    • 1970-01-01
    • 2022-11-28
    • 2014-01-20
    • 1970-01-01
    • 2012-11-09
    相关资源
    最近更新 更多