转换一个字段中含有多个另外一张表的id | | 行转列

1、Oracle Function

--入参:表 id

/*

cxcyxm02 :操作表,含有一个存储另一张表(xs0101)多个主键id的字段

 ids :操作表的主键 id

*/

CREATE OR REPLACE FUNCTION cxcyxmcyry(ids VARCHAR2) RETURN VARCHAR2 IS
tempcyryxx VARCHAR2(1000);
cyryxx VARCHAR2(1000);
cxcylength number;
i number;
BEGIN
i := 0;
select LENGTH(t.cymc) - LENGTH(REGEXP_REPLACE(t.cymc, ‘,‘, ‘‘)) + 1 as leng
into cxcylength
from cxcyxm02 t
select nvl(xm ||‘/‘|| xh, ‘‘)
into tempcyryxx
where cxcyxm02id = ids;
while i < cxcylength loop
if i = 0 then
from xs0101
where xs0101id = (select substr(concat(t.cymc, ‘,‘),
0,
instr(concat(t.cymc, ‘,‘), ‘,‘, 1, 1) - 1)
from cxcyxm02 t
where t.cxcyxm02id = ids);
else
select nvl(xm || xh, ‘‘)
into tempcyryxx
from xs0101
where xs0101id =
(select substr(concat(t.cymc, ‘,‘),
instr(concat(t.cymc, ‘,‘), ‘,‘, 1, i) + 1,
instr(concat(t.cymc, ‘,‘), ‘,‘, 1, i + 1) -
instr(concat(t.cymc, ‘,‘), ‘,‘, 1, i) - 1)
from cxcyxm02 t
where t.cxcyxm02id = ids);
end if;
i := i + 1;
if i = cxcylength then
cyryxx := cyryxx || tempcyryxx;
else
cyryxx := cyryxx || tempcyryxx || ‘,‘;
end if;
end loop;
return cyryxx;

END cxcyxmcyry;

2. Oracle自带函数

connect by level 是Oracle中一组关键字,是用来实现递归查询的,譬如说实现查询 1,2,3,4 .....n 的数字可以使用connect by level;

select level +1 from dual where connect by level <=10 ;
这种方式可以实现查询1到n的数字,共有n行;
select level from dual connect by level < 10;

REGEXP_SUBSTR函数格式如下:
function REGEXP_SUBSTR(String, pattern, position, occurrence, modifier)
__srcstr :需要进行正则处理的字符串
__pattern :进行匹配的正则表达式
__position :起始位置,从第几个字符开始正则表达式匹配(默认为1)
__occurrence :标识第几个匹配组,默认为1
__modifier :模式(‘i‘不区分大小写进行检索;‘c‘区分大小写进行检索。默认为‘c‘。)
实际应用如下:在Oracle中,使用一条语句实现将‘34,56,-23‘拆分成‘34‘,‘56‘,‘-23‘的集合

SELECT REGEXP_SUBSTR(‘34,56,-23‘, ‘[^,]+‘, 1, LEVEL, ‘i‘) AS STR
FROM DUAL
CONNECT BY LEVEL <= LENGTH(‘34,56,-23‘) -
LENGTH(REGEXP_REPLACE(‘34,56,-23‘, ‘,‘, ‘‘)) + 1;

Oracle 行转列pivot 、列转行unpivot 的Sql语句总结
http://blog.csdn.net/xiaokui_wingfly/article/details/42419207

时间: 2024-09-29 00:53:25

转换一个字段中含有多个另外一张表的id | | 行转列的相关文章

sql 根据指定条件获取一个字段批量获取数据插入另外一张表字段中

/****** Object: StoredProcedure [dbo].[getSplitValue] Script Date: 03/13/2016 13:58:12 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER PROCEDURE [dbo].[getSplitValue] AS --定义获取GUID DECLARE @NEWID NVARCHAR(50) SET @NEWID= REPLACE(NEWID(

4、CRM2011编程实战——将窗体中指定控件的值做处理后更新到另一个字段中

需求:将接报时间加上到期提醒时间后得到的值,更新到字段"到期截止时间" Js调用: //设置到期截止时间 function setDeadLine(){ var recordId = Xrm.Page.data.entity.getId(); var entityName = Xrm.Page.data.entity.getEntityName(); var reportedTime = Xrm.Page.getControl("hxcs_fdatetimeofrequest

5.oracle中一个字段中存储&#39;a&#39;,&#39;b&#39;与&#39;a&#39;与a的写法,存储过程中与之对应

select '''a'',''b''' from dual; --'a','b' select '''a''' from dual; --'a' select 'a' from dual; --a 5.oracle中一个字段中存储'a','b'与'a'与a的写法,存储过程中与之对应

如何判断多个字段组成的关键字在另外一张表中是否存在

如何判断多个字段组成的关键字在另外一张表中是否存在 老帅(20141107) 1.首先判断一个关键字在另外一张表中是否存在很容易! SELECT * FROM a WHERE a.ID IN ( SELECT b.ID FROM b ) 2.如果判断的关键字有多个字段构成怎么办呢? 你不能在IN中使用多个字段.如下查询: SELECT * FROM a WHERE (a.ID1, a.ID2) IN ( SELECT b.ID1, b.ID2 FROM b ) 这不会正常工作,违反了SQLSER

SqlServer将表中数据复制到另一张表

insert into phone2(ph,attr,type,carrier) select top 1000 ph,attr,type,carrier from phone 将表phone的字段和前1000条数据复制到Phone2表 数据库中的某个表删除重复数据(phone2表不能存在) select distinct  * into phone2 from phone 表phone的数据放到phone2中(phone2表可以存在) insert into phone2(ph,attr,ty

从MySQL全库备份中恢复某个库和某张表【转】

从MySQL全库备份中恢复某个库和某张表 一.全库备份-A [[email protected] backup]#mysqldump -uroot -p123456 --default-character-set=utf8 --single-transaction --extended-insert=false --hex-blob --master-data=2 --log-error=/tmp/test.err --routines --triggers --events --quick -

查询sybase DB中占用空间最多的前20张表

按照数据行数查询 Select top 20   name,    row_count(db_id(), id) from   sysobjects order by   row_count(db_id(),id) desc 按照分配的空间查询 Select top 20    name,   reserved_pages(db_id(),id)/(1024.0 / (@@maxpagesize/1024.0) ) as "Allocated MB" from    sysobject

sql server查找字段中含有汉字

/***************************************************************%%%% 描述: SQL语句查询字段中是否包含汉字%%****************************************************************%% 编写:[email protected] 2007-12-17%% 说明:如有转载请注明来处http://blog.sina.com.cn/houkuan***************

Hibernate继承(2)子类属性生成在自己的一张表中,父类的属性一张表

<?xml version="1.0"?> <!DOCTYPE hibernate-mapping SYSTEM "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd" > <!-- 具体表继承 子类扩展的数据保存在子类表中,继承的数据保存的父类表中 配置实现(如果才ER图上看就是一个一对一关系) 因为子类的数据保存在自己的表中,所以不需要类似 单表继承 辨别列 而是通过一个 主