从 DB2 中的列条目中查找多个子字符串

Find multiple substrings from a column entry in DB2

我有一个Table这样的

|   ID   |  otherID  | Data
+--------+-----------+----------------
|  1234  |   56789   | This is a Name: Charlie; string <name_starts> with Name: Alpha; also some more data and Name: Bravo;

这里最后一列有一个字符串,我需要它的那些名字(可能有很多名字),所以输出应该是这样的

|   Name   
+------------------
|  Alpha;Bravo;

我写了下面的查询可以检索名字,但是我需要所有的名字,不知道有多少名字

select substr(Data, locate('Name',Data)+6, locate(':',Data)-locate(':',Data)-6) from myTable

编辑:抱歉,我错过了一点,我必须获取 "name_starts" 之后出现的所有名称,在此之前,如果有的话,我需要忽略它们。很抱歉在发帖时遗漏了这个。

此外,我正在使用 DB2-LUW v9.7

请试试这个:

with data (s) as (values ('This is a string with Name: Alpha; also some more data and Name: Bravo;'))
select listagg(regexp_substr(s,'(?<=Name\: )[A-Za-z]+(?=\;)', 1, n),';')
from   data
cross  join (values (1),(2)) x (n)
where  n <= regexp_count(s,'(?<=Name\: )[A-Za-z]+(?=\;)')

我手头没有 10.5,但它适用于 11.1:

WITH TAB (DATA) AS 
(
VALUES
  'This is a string with Name: Alpha; also some more data and Name: Bravo;'
)
SELECT 
--REGEXP_REPLACE(T.DATA, '.*? Name: ([^\s]+)', '') -- Since 11.1
xmlcast(xmlquery('fn:replace($s, ".*? Name: ([^\s]+)", "")' passing T.DATA as "s") as varchar(100))
FROM TAB T;