ORACLE的SQL练习---7. 拼接字符串
程序员文章站
2024-02-13 23:22:16
...
1. 使用||拼接:
||的拼接可以实现两个或者多个字符串的拼接。例如:‘aaa’||‘bbb’||‘ccc’,下面为实际工作中批量更新字段长度的实例
select 'alter table ' || a.TABLE_NAME || ' modify ' || a.COLUMN_NAME || ' ' ||
a.DATA_TYPE || '(' || a.DATA_LENGTH * 2 || ');'
from user_tab_columns a
where a.TABLE_NAME in ('T_DWD_XD_MX')
and a.DATA_TYPE = 'VARCHAR2'
结果如下:
2. concat() :
oracle的concat只支持两个字符串的拼接,如果使用多个字符串拼接就要嵌套,用起来很麻烦,所以很少使用。
select concat('AAAA','BBBB' ) from dual;
显示结果: AAAABBBB
3. listagg()实现多行合并:
下面这个练习实例: 现有各班级选修课程列表,如下图:其中NUM为报名人数
现期望得到如下结果:
create table LX_20200218
(
class_id NUMBER,
c_name VARCHAR2(30),
num NUMBER
)
insert into lx_20200218 (CLASS_ID, C_NAME, NUM)
values (1, 'Python', 20);
insert into lx_20200218 (CLASS_ID, C_NAME, NUM)
values (1, 'java', 16);
insert into lx_20200218 (CLASS_ID, C_NAME, NUM)
values (1, 'C++', 5);
insert into lx_20200218 (CLASS_ID, C_NAME, NUM)
values (2, 'Python', 31);
insert into lx_20200218 (CLASS_ID, C_NAME, NUM)
values (2, 'java', 22);
insert into lx_20200218 (CLASS_ID, C_NAME, NUM)
values (3, 'R', 3);
insert into lx_20200218 (CLASS_ID, C_NAME, NUM)
values (3, 'Python', 18);
insert into lx_20200218 (CLASS_ID, C_NAME, NUM)
values (3, 'java', 11);
insert into lx_20200218 (CLASS_ID, C_NAME, NUM)
values (3, 'C++', 5);
答案:
select a.class_id, wm_concat(a.c_name || '(' || a.num || ')' || '人') as 结果
from lx_20200218 a
group by a.class_id;
如果oracle升级到12C之后 wm_concat就不能使用了,要换成下面写法,或者自己在12C环境创建该函数
select a.class_id,
listagg(a.c_name|| '(' || a.num || ')' || '人', ',') WITHIN GROUP(ORDER BY a.c_name)
from lx_20200218 a
group by a.class_id
上一篇: PHP如何制作简易问卷调查
下一篇: FastJSON 简单使用
推荐阅读