首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Oracle sql显示、查找和显示大写字符串文本,以M开头,仅作为下一个重复文本

Oracle sql显示、查找和显示大写字符串文本,以M开头,仅作为下一个重复文本
EN

Stack Overflow用户
提问于 2021-06-09 15:13:38
回答 1查看 48关注 0票数 0

我有一个名为tbl_notes需要使用Oracle的表。它有2列ID和Notes。

代码语言:javascript
复制
Select * from tbl_notes where id > 11 and id < 15

显示:

D_

12 .运输至MEE的再转机产品

13 .在通往M44、MTT、MZZ的道路上

14台产品已向M99进货

我想让它显示:

D_

12 ._

13 .生产成本-间接M44

13 .再接再分配MTT法

13 -中转站

14

14 .准工业用M99

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-06-09 16:01:46

这是一个有点麻烦的数据模型,试图提取这些值可能会导致误报,但您可以使用regexp_substr()和分层查询(或递归CTE)尝试它--本质上将其视为分隔文本:

代码语言:javascript
复制
select id, notes, regexp_substr(notes, '(M[[:alnum:]]{2})([^[:alnum:]]|$)', 1, level, null, 1) as locations
from tbl_notes
connect by level < regexp_count(notes, '(M[[:alnum:]]{2})([^[:alnum:]]|$)')
and id = prior id
and prior sys_guid() is not null

用你的数据得到:

代码语言:javascript
复制
ID NOTES                                LOCATIONS
-- ------------------------------------ ---------
12 Item on shipment to MEE              MEE
13 MATARIAL ON THE WAY TO M44, MTT, MZZ M44
13 MATARIAL ON THE WAY TO M44, MTT, MZZ MTT
13 MATARIAL ON THE WAY TO M44, MTT, MZZ MZZ
14 MVV shipments coming to M99          MVV
14 MVV shipments coming to M99          M99

但是,所有示例都与“下一个2重复”部分匹配;如果引入另一个与此不匹配的行,则该值也将被选中:

代码语言:javascript
复制
ID NOTES                                LOCATIONS
-- ------------------------------------ ---------
...
15 MVA shipments coming to M999         MVA

您可以使用子查询和substr检查来消除以下内容:

代码语言:javascript
复制
select id, locations
from (
  select id, regexp_substr(notes, '(M[[:alnum:]]{2})([^[:alnum:]]|$)', 1, level, null, 1) as locations
  from tbl_notes
  connect by level <= regexp_count(notes, '(M[[:alnum:]]{2})([^[:alnum:]]|$)')
  and id = prior id
  and prior sys_guid() is not null
)
where substr(locations, 2, 1) = substr(locations, 3, 1)

这会得到:

代码语言:javascript
复制
ID LOCATIONS
-- ---------
12 MEE
13 M44
13 MTT
13 MZZ
14 MVV
14 M99

db<>fiddle

然而,这可能会在某一时刻中断,因此,当您遇到边缘情况时,可能会反复调整和调整。

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

https://stackoverflow.com/questions/67907025

复制
相关文章

相似问题

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