[英]Extract Value From Text And Convert Row To Column
tbl1
是
ID | TXT -- | ----------------------------------------------------------------------------- 1 | Material discharged in hopper: Dest: FURNACE; ; 312 - CALCINE DOLOMIT: 1505kg; 2 | Dest: FURNACE; AUTO; 312 - CALCINE DOLOMIT: 1505kg; 3 | Material discharged in hopper: Dest: FURNACE; ; 401 - LIME-LUMP: 993kg; 312 - CALCINE DOLOMIT: 521kg; 4 | Dest: FURNACE; AUTO; 401 - LIME-LUMP: 993kg; 312 - CALCINE DOLOMIT: 521kg; 5 | Material discharged in hopper: Dest: FURNACE; ; 400 - LIME-LUMP: 1007kg; 6 | Dest: FURNACE; AUTO; 400 - LIME-LUMP: 1007kg;
我想提取LIME-LUMP
和CALCINE DOLOMIT
的数字并显示在单独的列中,如下所示:
ID | CALCINE DOLOMIT| LIME-LUMP | -- | ----------------------------------------------------------------------------- 1 | 1505 |0 2 | 1505 |0 3 | 993 |521 4 | 993 |521 5 | 0 |1007 6 | 0 |1007
我写了这个查询:
select id,txt,
REGEXP_SUBSTR(txt, '\d+', 1, 2) AS CALCINE_DOLOMIT,
REGEXP_SUBSTR(txt, '\d+', 1, 4) AS LIME_LUMP
from tbl1
但是此查询有时会返回Calcine dolomit
的Lime Lump
值...
提取值后,我想将第 2、4、6 行(TXT 列有Dest:
字符串)移动到DEST id
列,如下所示:
ID | CALCINE DOLOMIT| LIME-LUMP |DEST id -- | -------------------------------------- 1 | 1505 |0 |2 3 | 993 |521 |4 5 | 0 |1007 |6
请帮我...
db<> 在这里摆弄
您可以使用此查询获得所需的结果。 它使用 CTE 使用REGEXP_SUBSTR
从源中提取CALCINE_DOLOMIT
和LIME_LUMP
值,然后在与提取的值匹配的行上将其JOIN
回原始表并以Dest:
WITH CTE AS (
SELECT Id,
REGEXP_SUBSTR(txt, 'CALCINE DOLOMIT: (\d+)', 1, 1, '', 1) AS CD,
REGEXP_SUBSTR(txt, 'LIME-LUMP: (\d+)', 1, 1, '', 1) AS LL
FROM tbl1
WHERE txt NOT LIKE 'Dest:%'
)
SELECT CTE.Id, CTE.CD "CALCINE DOLOMIT", CTE.LL "LIME-LUMP", t1.ID "Dest ID"
FROM tbl1 t1
JOIN CTE ON t1.txt LIKE 'Dest:%'
AND (CTE.CD IS NULL OR REGEXP_LIKE(txt, CONCAT('CALCINE DOLOMIT: ', CTE.CD)))
AND (CTE.LL IS NULL OR REGEXP_LIKE(txt, CONCAT('LIME-LUMP: ', CTE.LL)))
Output:
ID CALCINE DOLOMIT LIME-LUMP Dest ID
1 1505 2
3 521 993 4
5 1007 6
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.