首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从DB2中的列条目中查找多个子字符串

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

Stack Overflow用户
提问于 2020-04-01 14:32:34
回答 2查看 483关注 0票数 0

我有一张这样的桌子

代码语言:javascript
复制
|   ID   |  otherID  | Data
+--------+-----------+----------------
|  1234  |   56789   | This is a Name: Charlie; string <name_starts> with Name: Alpha; also some more data and Name: Bravo;

在这里,最后一列有一个字符串,我需要这些名称(可能有很多名称),所以输出应该如下所示

代码语言:javascript
复制
|   Name   
+------------------
|  Alpha;Bravo;

我编写了以下查询,可以检索名称,但我需要所有的名称,并且不知道有多少个名称

代码语言:javascript
复制
select substr(Data, locate('Name',Data)+6, locate(':',Data)-locate(':',Data)-6) from myTable

编辑:很抱歉,我忽略了一个问题,我必须把所有发生在"name_starts“之后的名字都取下来,如果有任何需要忽略它们的话。很抱歉在发帖的时候错过了这个。

另外,我使用的是DB2-LUW v9.7

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-04-01 15:36:11

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

代码语言:javascript
复制
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;
票数 0
EN

Stack Overflow用户

发布于 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+(?=\;))

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60973324

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档