oracle 字符串拼接

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle 字符串拼接相关的知识,希望对你有一定的参考价值。

关于oracle需求:表A中有字段a(运单号),b(出发地),c(目的地),d(航段编号)一张表中运单号最多重复4个,换句话说最多有4行的运单号是一样的,比如运单号为999的有4条记录,分别对应着航段编号1,2,3,4 。第一条:出发地x,目的地y。第二条:出发地y,目的地z。第三条:出发地z,目的地m。第四条:出发地m,目的地l。所以,我想汇总他们的时候得出一个字段叫“航程”,值为x-y-z-m-l。怎么写sql语句。

1、创建新的测试数据表,或者可以选择要测试的现有表数据。这只是测试字符串连接,不会影响数据内容。从T_BASE_PROVINCE t中选择*,其中t.id = 1。

2、首先介绍下一个||满足连接,||可以一次连接多个字符串,选择t.PROVINCEID ||来自T_BASE_PROVINCE的t.PROVINCE t其中t.id = 1。

3、由||连接除了字段和字段之间的字符串连接之外,还可以将方法连接到常量字符串选择'省:'||来自T_BASE_PROVINCE的t.PROVINCE t其中t.id = 1。

4、您还可以使用CONCAT函数连接到字符串,传入函数字符串1和字符串2,两个参数。参数的方式也支持常量字符串从T_BASE_PROVINCE t中选择CONCAT(t.PROVINCEID,t.PROVINCE),其中t.id = 1。

5、如果要连接的字符串有两个以上的参数,如下例所示,则有4个字符串连接。运行后,测试发现异常,参数无效。从T_BASE_PROVINCE t中选择CONCAT('省ID:',t.PROVINCEID,'省:',t.PROVINCE),其中t.id = 1; -  ERROR ORA-00909:参数数量无效。

6、对于上述问题,如果连接参数大于2,则可以选择CONCAT嵌套方法。从T_BASE_PROVINCE t中选择CONCAT(CONCAT('省ID:',t.PROVINCEID),'省:'),t.PROVINCE),其中t.id = 1。

参考技术A

1、创建新的测试数据表,或者可以选择要测试的现有表数据。这只是测试字符串连接,不会影响数据内容。从T_BASE_PROVINCE t中选择*,其中t.id = 1。

2、首先介绍下一个||满足连接,||可以一次连接多个字符串,选择t.PROVINCEID ||来自T_BASE_PROVINCE的t.PROVINCE t其中t.id = 1。

3、由||连接除了字段和字段之间的字符串连接之外,还可以将方法连接到常量字符串选择'省:'||来自T_BASE_PROVINCE的t.PROVINCE t其中t.id = 1。

4、您还可以使用CONCAT函数连接到字符串,传入函数字符串1和字符串2,两个参数。参数的方式也支持常量字符串从T_BASE_PROVINCE t中选择CONCAT(t.PROVINCEID,t.PROVINCE),其中t.id = 1。

5、如果要连接的字符串有两个以上的参数,如下例所示,则有4个字符串连接。运行后,测试发现异常,参数无效。从T_BASE_PROVINCE t中选择CONCAT('省ID:',t.PROVINCEID,'省:',t.PROVINCE),其中t.id = 1; -  ERROR ORA-00909:参数数量无效。

6、对于上述问题,如果连接参数大于2,则可以选择CONCAT嵌套方法。从T_BASE_PROVINCE t中选择CONCAT(CONCAT('省ID:',t.PROVINCEID),'省:'),t.PROVINCE),其中t.id = 1。

参考技术B select t1.b || '-' || t2.b
from (select a, b from A where d = 1) t1,
(select a, replace(wm_concat(c), ',', '-') b
from A
start with d = 1
connect by b = prior c
group by a) t2
where t1.a = t2.a本回答被提问者和网友采纳
参考技术C select t1.b || t2.b
from t1 ,
(select a,sys_connect_by_path(c,'-') b
FROM T1
WHERE C='l'
START WITH b='x'
CONNECT BY PRIOR C = B) t2

where t1.a = t2.a and t1.b='x';
参考技术D select t1.b || '-' || t2.b
from (select b from a where d = 1) t1,
(select replace(wm_concat(c), ',', '-') b
from a
start with d = 1
connect by b = prior c) t2

将oracle 查询结果列拼接为字符串

表中的原始数据为
id name
1 a
1 b
1 c
2 a
2 b
3 a
3 c
.......
现在想查询显示的结果为
id name
1 a,b,c
2 a,b
3 a,c
.......
sql语句咋写 在线等谢谢!急!!!!!

参考技术A create table test (id int, name varchar(10) )
insert into test values (1,'a')
insert into test values (1,'b')
insert into test values (1,'c')
insert into test values (2,'a')
insert into test values (2,'b')
insert into test values (3,'a')
insert into test values (3,'c')

select id,sys_connect_by_path(name,',') from (
select id,name, row_number() over(partition by id order by name)rn,
count(*) over(partition by id ) cnt from test
) a where level=cnt
start with rn=1 connect by prior id=id and prior rn=rn-1

测试后 可用。

一楼的回答其实最容易理解了。你把它修改成动态sql 就可以了。可以不受限制了。本回答被提问者采纳
参考技术B 个数有限,可以实现
select id, max(case when rk = 1 then name else '' end)
||','||max(case when rk = 2 then name else '' end)
||','||max(case when rk = 3 then name else '' end)
from (SELECT id, name,row_number() over(partition by id order by name) rk from tab) t
group by id追问

个数是不无限的,具体的值不确定,是根据关联关系出来的

追答

那自己写存储过程吧,sql不是万能的。

参考技术C select t.id, WMSYS.WM_CONCAT(t.Name) name From table_name t GROUP BY t.id追问

中文会出现乱码,咋解决

以上是关于oracle 字符串拼接的主要内容,如果未能解决你的问题,请参考以下文章

将oracle 查询结果列拼接为字符串

将oracle 查询结果列拼接为字符串

Oracle字符串的拆分和拼接

模糊查询时oracle中的字符串的拼接

oracle操作字符串:拼接替换截取查找

oracle字符串操作:拼接替换截取查找