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 ...
随机推荐
- java中使用数组和链表简单实现SJBMap
import java.util.LinkedList; public class SJBMap { private Object[] elementData; private int size; p ...
- JAVA-反射学习
原文:http://www.cnblogs.com/rollenholt/archive/2011/09/02/2163758.html 个人总结: 1. 反射是什么:由字节码文件(.class)获取 ...
- Struts2的通配符配置方式
Struts2的Action类很有意思,你可以使用3种方式来实现具体的Action类: 让你的Action类继承自ActionSupport类(项目中最常用这种方式,因为ActionSupport类中 ...
- 学习笔记:shell 中 [-eq] [-ne] [-gt] [-lt] [ge] [le]
-eq //等于 -ne //不等于 -gt //大于 (greater ) -lt //小于 (less) -g ...
- Java获取IP
public static String getIpAddr(HttpServletRequest request) { String ip = request.getHeader(&q ...
- cetos6 安装samba共享文件夹
yum方式安装 yum install samba 修改配置文件 vim /etc/samba/smb.conf [global] comment = global workgroup = QFpay ...
- c#代码发送post请求,上传文件(并带其他参数)
本人对post理解不深,前段时间遇到一个需要用c#代码发送post请求上传文件的业务,于是参考了几篇帖子,加上自身实践写出了如下代码.写的比较low 望各位大大指正^_^. 业务需求: 对方给了一个接 ...
- leaflet地图在选项卡中不正常显示
可以在选项卡中加个click事件,调用下 <a href="#tab1" >tab1</a><a href="#tab2" onc ...
- SaltStack Job管理
Job基本管理 Jid: job id,格式为%Y%m%d%H%M%S%f 在master在下发指令消息时,会附带上产生的jid.minion在接收到指令开始执行时,会 在本地的cachedir(默认 ...
- 汉字转全拼音函数优化方案(SQLServer),值得你看看
函数要求实现功能 select 函数名 ('你好,我是追索') 返回的结果(ni hao , wo shi zhui suo) 解决方案一: 解决方案一 /* 根据汉字获取全拼 1.生成所有读音临时表 ...