Oracle 正则 一行转多行
SELECT REGEXP_SUBSTR(bjdm||',', '[^,]+', 1, LEVEL, 'i') AS STR,bjdm FROM valueWeekInfo
CONNECT BY LEVEL <= LENGTH(bjdm) - LENGTH(REGEXP_REPLACE(bjdm, ',', '')) + 1;
可以将 bjdm 换成 '01,02,03,04' , valueWeekInfo 换成dual 查看结果
SELECT REGEXP_SUBSTR(zzjs, '[^,]+', 1, ROWNUM, 'i') str,zzjs FROM
(select zzjs from bjpjxxb group by zzjs )
CONNECT BY ROWNUM <= LENGTH(zzjs) - LENGTH(REGEXP_REPLACE(zzjs, ',', ''))+1
有时用RowNum会出现 一些问题,结合上面的LEVEL使用
WITH test AS
(SELECT 1 id1, 'aaa,bbb,ccc,ddd' id2
FROM dual
UNION ALL
SELECT 2 id1, 'eee,fff,ggg,hhh,kkkk,ivwshjj' id2 FROM dual) SELECT id1,
substr(t.ca,
instr(t.ca, ',', 1, d.lv) + 1,
instr(t.ca, ',', 1, d.lv + 1) -
(instr(t.ca, ',', 1, d.lv) + 1)) AS d
FROM (SELECT id1,
',' || id2 || ',' AS ca,
length(id2 || ',') - nvl(length(REPLACE(id2, ',')), 0) AS cnt
FROM test) t,
(SELECT LEVEL lv FROM dual CONNECT BY LEVEL <= 100) d
WHERE d.lv <= t.cnt
ORDER BY id1 SELECT substr(t.classid,instr(t.classid, ',', 1, d.lv) + 1,
instr(t.classid, ',', 1, d.lv + 1) -
(instr(t.classid, ',', 1, d.lv) + 1)) str,classid,vid FROM
(select vid,',' || classid || ',' classid
,length(classid || ',') - nvl(length(REPLACE(classid, ',')), 0) AS cnt from classvedio
where createtime between '2015-09-01' and '2015-12-31' group by classid,vid) t,
(SELECT LEVEL lv FROM dual CONNECT BY LEVEL <= 100) d
WHERE d.lv <= t.cnt
ORDER BY vid,str desc
SELECT REGEXP_SUBSTR(classid, '[^,]+', 1, lv, 'i') AS STR,classid,vid,lv FROM
(
select * from (
select vid,',' || classid || ',' classid
,length(classid || ',') - nvl(length(REPLACE(classid, ',')), 0) AS cnt
from classvedio) c,
(SELECT LEVEL lv FROM dual CONNECT BY LEVEL <= (select max(length(classid)) from classvedio)) d
WHERE d.lv <= c.cnt
ORDER BY vid desc,lv asc
)
最终完成版本
/// <summary>
/// 将某表的某列拆分成多行数据,返回的结构为
/// str,拆分出来的每一个字段
/// lv,拆分行数
/// primarycols
/// key
/// </summary>
/// <param name="tablename">表名</param>
/// <param name="primarycols">表主键列</param>
/// <param name="key">要拆分的列</param>
/// <param name="splitchar">分隔字符串</param>
/// <returns></returns>
public static string GetCommand(string tablename, string primarycols, string key,string splitchar)
{
StringBuilder sb = new StringBuilder();
sb.AppendLine(string.Format("SELECT REGEXP_SUBSTR({0}, '[^{2}]+', 1, lv, 'i') AS STR,{1},{0},lv FROM (", key, primarycols,splitchar));
sb.AppendLine(string.Format("select * from (select {0},'{2}' || {1} || '{2}' {1}", primarycols, key,splitchar));
sb.AppendLine(string.Format( ",length({0} || '{1}') - nvl(length(REPLACE({0}, '{1}')), 0) AS cnt",key,splitchar));
sb.AppendLine(string.Format( "from {0}) c,",tablename));
sb.AppendLine(string.Format("(SELECT LEVEL lv FROM dual CONNECT BY LEVEL <= (select max(length({0})) from {1})) d", key, tablename));
sb.AppendLine(string.Format( "WHERE d.lv <= c.cnt ORDER BY {0},lv asc",primarycols));
sb.AppendLine(")");
return sb.ToString();
}
Oracle 正则 一行转多行的更多相关文章
- Oracle一列的多行数据拼成一行显示字符
Oracle一列的多行数据拼成一行显示字符 oracle 提供了两个函数WMSYS.WM_CONCAT 和 ListAgg函数. www.2cto.com 先介绍:WMSYS.WM_CO ...
- VS2012 利用正则统计项目代码行数
原文:VS2012 利用正则统计项目代码行数 #开头和/开头或者空行都不计入代码量, 搜索出来以后最后一行就是代码行数了:
- winform代码:关联窗体数据更新,删除dataGridview中选中的一行或多行
一.关联窗体数据更新 关联窗体数据修改时,如果一个为总体数据显示窗体A,另一个为详细修改窗体B,从A进入B,在B中对数据进行修改,然后返回A,这时A窗体的数据需要更新. 我采用最简单的方法,首先保证每 ...
- HNU13028Attacking rooks (二分匹配,一行变多行,一列变多列)
Attacking rooks Time Limit: 20000ms, Special Time Limit:50000ms, Memory Limit:65536KB Total submit u ...
- hive 实现一个字段多行转一行 和 一行转多行
1.多行转一行 多行转一行可以通过concat_ws(',',collect_set(col_name)) as col_new的方式实现,可以参考:https://www.cnblogs.com/s ...
- hive一行变多行及多行变一行
hive一行变多行及多行变一行 场景 name alias zhaoqiansun abc def ghi 处理数据时需要将上表处理成为下面的形式: name alias zhaoqiansun ab ...
- Oracle sql%rowcount 返回影响行数;sql server @@RowCount返回影响行数
sql server中,返回影响行数是:If @@RowCount<1 Oracle中,返回影响行数是:If sql%rowcount<1 例: sqlserver: create pro ...
- hivepython 实现一行转多行
案例1: ==效果等同于一行转多行 数据表名称:zhangb.gid_tags 数据格式,每行是2个字段,(gid,tags) ,可能有脏数据,分隔符为“\t”, ANDROID-9de77225 ...
- 一行转多行 及多行转一行的 hive语句
注意 :|,: 是特殊符号,要用 "\\|", "\\;"来表示. 一行转多行 usertags 里面有很多项,每项之间以逗号分隔 create t ...
随机推荐
- 【1】JavaScript编程全解笔记(一)
1.概述 本书涵盖了 JavaScript 各个方面的主题,从客户端以及服务端 JavaScript 等基础内容,主要讲了 HTML5.Web API.Node.js 与 WebSocket 等技术 ...
- Tomcat多域名的配置
有时候我们有好几个项目需要发布在同一个tomcat服务器上,每个项目有不同的域名.这就需要在tomcat里配置多域名,添加多个虚拟主机. 主要在server.xml里面设置: 在<Engine& ...
- cocos2d-html5 之重要概念
1,CCDirector:导演: 2,CCCamera: 摄像机:细到每个节点都要用摄像机,例如节点发生放大,缩小,旋转的时候,要继承摄像机,让其重新渲染: 3,CCScene:场景,拍电影时的一段剪 ...
- 在GNU/Linux下使用命令行自动挂载与卸载USB磁盘
在命令行环境下如果每次都是靠手动敲入mount与umount命令来挂载与卸载USB磁盘是件很麻烦的事情.尤其是mount命令的参数非常多.比如,磁盘的分区类型(vfat.ntfs等),挂载的目录节点, ...
- 关于最新版本的log4net使用中遇到的问题
Quartz.NET是一个开源的作业调度框架,是OpenSymphony 的 Quartz API的.NET移植,它用C#写成,可用于winform和asp.net应用中.它提供了巨大的灵活性而不牺牲 ...
- CSS实现三角形图标的原理《转载》
网页中经常有一种三角形的图标,鼠标点一下会弹出一个下拉菜单之类的(之前淘宝也有,不过现在改版好像没有了) 之前以为是个png图标背景,后来在bootstrap中看到有一个图标样式叫做caret的用来实 ...
- JAVA内容回顾(二)——面向对象(OOP)
1.类与对象 类:类指的是同种对象的抽象,看不见摸不着的.包含有属性与方法. 对象:是类的具体实现,看的见摸得着的东西. 类是对象的抽象,对象是类的具体实现. 2.访问修饰符 public:在项目的任 ...
- Oracle中sys和system用户的区别
1.数据库的启动需要以SYSDBA/SYSOPER身份登录. 2.如果在同一主机上使用IPC连接到数据库使用操作系统授权,登录任何一个用户都可以拥有as sysdba和as sysoper. 3.sy ...
- MongoDB高级查询用法大全
转载 http://blog.163.com/lgh_2002/blog/static/440175262012052116455/ 详见官方的手册: http://www.mongodb.org/d ...
- [PCB设计] 3、用CAM350修改GERBER文件(删除某些部分)
1.问题产生 由于在电子元件封装时阻焊开窗未处理好,生成的GERBER文件在生产钢网时容易出现错误.比如:测试点上不需要上锡,如果封装元件时采用焊盘修改而来,结果往往使paste层在该测试点上有覆盖, ...