我有一张这样的桌子
| 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
发布于 2020-04-01 15:36:11
我手头没有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]+)', '$1') -- Since 11.1
xmlcast(xmlquery('fn:replace($s, ".*? Name: ([^\s]+)", "$1")' passing T.DATA as "s") as varchar(100))
FROM TAB T;发布于 2020-04-01 15:06:17
请试试这个:
(s) as (值(‘这是一个字符串,名称为: Alpha;还有更多的数据和名称: Bravo;'))从数据交叉连接(值(1),(2))中选择listagg(regexp_substr(s,'(?<=Name\:)A+(?=\;),1,n),’‘),其中n <= regexp_count(s,'(?<=Name\:)A+(?=\;))
https://stackoverflow.com/questions/60973324
复制相似问题