如何在Db2中从分隔字符串中提取值

如何在Db2中从分隔字符串中提取值,db2,Db2,如何从以下字符串中提取PAXG 0410|M|PAXG|20181114 在DB2SQL中,对表BILL及其包含数据的列COL1尝试此操作 SELECT COL1 -- since 9.7 , xmlcast(xmlquery('fn:tokenize($s, "\|")[3]' passing BILL.COL1 as "s") as varchar(20)) as one -- since 11.1 , REGEXP_SUBSTR(BILL.COL1 || '|', '([^\|

如何从以下字符串中提取
PAXG

0410|M|PAXG|20181114  

在DB2SQL中,对表
BILL
及其包含数据的列
COL1
尝试此操作

SELECT 
  COL1
-- since 9.7
, xmlcast(xmlquery('fn:tokenize($s, "\|")[3]' passing BILL.COL1 as "s") as varchar(20)) as one
-- since 11.1
, REGEXP_SUBSTR(BILL.COL1 || '|', '([^\|]*)\|', 1, 3, '', 1) as two
FROM 
(VALUES '0410|M|PAXG|20181114', '0410|M||20181114') BILL (COL1)
--BILL
;

对表
BILL
及其包含数据的列
COL1
尝试此操作

SELECT 
  COL1
-- since 9.7
, xmlcast(xmlquery('fn:tokenize($s, "\|")[3]' passing BILL.COL1 as "s") as varchar(20)) as one
-- since 11.1
, REGEXP_SUBSTR(BILL.COL1 || '|', '([^\|]*)\|', 1, 3, '', 1) as two
FROM 
(VALUES '0410|M|PAXG|20181114', '0410|M||20181114') BILL (COL1)
--BILL
;

如果您使用的是DB211.1或更高版本,那么
REGEXP\u EXTRACT
将适用于您。例如

VALUES REGEXP_EXTRACT('0410|M|PAXG|20181114','([^\|]*)\|?', 1, 3, '', 1)
返回

1     
------
PAXG  

如果您使用的是DB211.1或更高版本,则
REGEXP\u EXTRACT
将适用于您。例如

VALUES REGEXP_EXTRACT('0410|M|PAXG|20181114','([^\|]*)\|?', 1, 3, '', 1)
返回

1     
------
PAXG  


欢迎继续,您可以在这里看到:给定值存储在一个表的变量中,即BILL。如何从变量中提取该值。@JoeTaras我不明白结束此问题的原因。上面提到的帖子中的所有答案都没有使用这里描述的方法,它们效率很低,或者没有这些方法那么灵活和简单。所有这些旧答案都可能是在Db2中没有基于regexp的函数时编写的,或者是那些编写者不知道这些函数时编写的。@mustaccio我不理解结束此问题的原因。上面提到的帖子中的所有答案都没有使用这里描述的方法,它们效率很低,或者没有这些方法那么灵活和简单。所有这些旧答案可能都是在Db2中没有基于regexp的函数时编写的,或者那些编写者不知道这些函数,您可以在这里看到:给定的值存储在一个表的变量中,该表是BILL。如何从变量中提取它。@JoeTaras我不明白结束这个问题的原因。上面提到的帖子中的所有答案都没有使用这里描述的方法,它们效率很低,或者没有这些方法那么灵活和简单。所有这些旧答案都可能是在Db2中没有基于regexp的函数时编写的,或者是那些编写者不知道这些函数时编写的。@mustaccio我不理解结束此问题的原因。上面提到的帖子中的所有答案都没有使用这里描述的方法,它们效率很低,或者没有这些方法那么灵活和简单。所有这些旧答案都可能是在Db2中没有基于regexp的函数时编写的,或者是那些编写者不知道这些函数时编写的。给定的值存储在一个表的变量中,即BILL,我如何从该变量中提取它。请更具体地说,当您提出问题时。使用正确的术语。没有
变量
这样的含义。有
<代码>语句表示SQL语句,而不是从中提取数据。提供表和列名,至少不要让其他人猜测…给定的值存储在表的变量中,即BILL。我如何从变量中提取它。请在提问时更具体一些。使用正确的术语。没有
变量
这样的含义。有
<代码>语句表示SQL语句,而不是从中提取数据。提供表名和列名,至少不要让其他人猜到…这对空令牌不起作用。它应该有点不同…第一个参数应该由分隔符在外部关闭。如果您需要,您将无法获得最后一个令牌(第4个),我已经更新了我的代码。空令牌不起作用。它应该有点不同…第一个参数应该由分隔符在外部关闭。如果您需要,您将无法获得最后一个令牌(第4个),我已经更新了代码