内分泌资讯
快速导航
频道
女性
减肥
育儿
保健
美容
妇科
饮食
中医
肿瘤
资讯
男性
诊疗
呼吸科
心血管
肝病科
更多
服务
问医生
就医助手
药品通
疾病百科
名医在线
简单生活
热门疾病
高血压
阴道炎
肩周炎
脂肪肝
小儿咳嗽
糖尿病
健康科普
科普基地
关注39减肥健康运动

查看更多相关内容

取消关注
首页 > 内分泌与代谢 > 内分泌资讯

(2025已更新(今日)-彩六tracker -实时互动,拉近彼此距离。

举报/反馈
2025-2-22 16:34:57 39健康网

近日,位于四川的攀枝花市迎来了备受瞩目的国际葡萄节,吸引了来自全国各地的游客前来参与这一盛会。本次活动以“葡萄之乡,醉美攀枝花”为主题,展现了当地丰富的葡萄文化和独特的自然风光。

节庆期间,游客们不仅可以品尝到各式各样的新鲜葡萄,还能参与各种丰富多彩的活动,包括葡萄采摘、酿酒体验以及美食展览等。当地农民也积极参与,展示他们的优质葡萄和独特的种植技巧。

攀枝花市的美丽风景和温暖的气候,为游客提供了一个理想的度假胜地。许多游客表示,这不仅是一次美味的享受,更是一次难忘的体验,充分感受到了当地的热情和风土人情。

此次国际葡萄节的成功举办,进一步提升了攀枝花的知名度,推动了当地的旅游业和农产品销售,也为未来的节庆活动奠定了良好的基础。

39健康网专业医疗保健信息平台 优质健康资讯门户网站  
快速通道
相关推荐39精品39热文
自测
查看全部
推荐专家
查看更多
推荐医院
查看更多
健康资讯热门资讯
Oracle 以逗号分隔的字符串拆分为多行数据实例详解 - 零玖博客

Oracle 以逗号分隔的字符串拆分为多行数据实例详解

2022 年 2 月 19 日 1774 点热度 1 人点赞 0 条评论

前言

近期在工作中遇到某表某字段是可扩展数据内容,信息以逗号分隔生成的,现需求要根据此字段数据在其它表查询相关的内容展现出来,第一想法是切割数据,以逗号作为切割符,以下为总结的实现方法,以供大家参考、指教。

1 、 regexp_substr 函数,通过正则来拆分字符串,函数用法为:(必须是 oracle 10g+的版本才支持)

REGEXP_SUBSTR 函数格式如下:

function REGEXP_SUBSTR(String, pattern, position, occurrence, modifier)

__srcstr :需要进行正则处理的字符串

__pattern :进行匹配的正则表达式

__position :起始位置,从第几个字符开始正则表达式匹配 (默认为 1)

__occurrence :获取第几个分割出来的组 (分割后最初的字符串会按分割的顺序排列成组),默认为 1

__modifier :模式 ('i'不区分大小写进行检索;'c'区分大小写进行检索。默认为'c'。) 针对的是正则表达式里字符大小写的匹配


 

此函数只能每次取一个字符串出来,有点鸡肋,字符串中逗号的数量是不确定的,如果有 2 个逗号,需要提取的字段就是 3 个。为了确定有多少个需要提取的字段,需要用到 connect by 命令实现动态参数构造连续的值,通过原字符串长度和被替换后字符串长度相减,可以得到原字符串中的逗号数量,加 1 后得到需要提取的匹配字段数量。

SQL:

select bs from cs1_0 where slid='201804100038'
--正则分割后的第一个值
SELECT REGEXP_SUBSTR((select bs from cs1_0 where slid='201804100038'),'[^,]+',1,1,'i') as 分割后结果 FROM DUAL;
--获取一个多个数值的列,从而能够让结果以多行的形式展示出来 
SELECT LEVEL FROM DUAL CONNECT BY LEVEL <=5;
--将上面 REGEXP_SUBSTR 的 occurrence(标识第几个匹配组) 实现动态参数,使用 connect by 组合起来
SELECT REGEXP_SUBSTR((select bs from cs1_0 where slid='201804100038'),'[^,]+',1,LEVEL,'i') as 分割后结果 FROM DUAL CONNECT BY LEVEL <=5;
--优化一下 (动态获匹配组标识行数)
select regexp_substr((select bs from cs1_0 where slid='201804100038'),'[^,]+',1,LEVEL,'i') as 分割后结果 from dual 
connect by level <= length((select bs from cs1_0 where slid='201804100038'))-length(regexp_replace((select bs from cs1_0 where slid='201804100038'),',',''))+1;

 


2 、以 Type 类型和 function 函数的方式实现

1) 建立 TYPE 类型


CREATE OR REPLACE TYPE strsplit_type_12 IS TABLE OF VARCHAR2 (4000)

2) 建立 function 存储函数
create or replace function strsplit_66(p_value varchar2,p_split varchar2 )  --字符串,切割符
--根据特定字符来切割字符串
return strsplit_type_12
pipelined is
v_idx       integer;
v_str       varchar2(500);
v_strs_last varchar2(4000) := p_value;

begin
loop
  v_idx := instr(v_strs_last, p_split);
  exit when v_idx = 0;
  v_str       := substr(v_strs_last, 1, v_idx - 1);
  v_strs_last := substr(v_strs_last, v_idx + 1);
  pipe row(v_str);
end loop;
pipe row(v_strs_last);
return;
end strsplit_66;

SELECT ROWNUM 序号, a.* FROM TABLE(strsplit_66((select bs from cs1_0 where slid='201804100038'), ',')) a;

 

测试一下:

内容转载自网络,仅供自身学习收藏使用,侵删。

Gcod

人生若只如初见,何事秋风悲画扇

文章评论