oracle如何将多个值放在一个字段里面 用逗号隔开

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle如何将多个值放在一个字段里面 用逗号隔开相关的知识,希望对你有一定的参考价值。

参考技术A wmsys.wm_concat() 这个函数,是把一列的值都取出来放在一个字段里,并且是用逗号隔开的 参考技术B 用 || 拼起来

select 字段1|| ','||字段2 from 表

oracle 如何将一个字段里的值拆分为多个值显示出来

如何将一个字段里的值拆分为多个值显示出来
表 a 字段 有 ID NAME:
ID NAME
1 AA,BB,CC
2 DD,EE
3 FF,GG,RR,QQ
想要的效果:
ID NAME
1 AA
1 BB
1 CC
2 DD
2 EE
......

有大神会的没 急需谢谢了

直接使用拼接的方法来解决此问题。

如下参考:

1.新的PHP文件,如下所示。

2.声明数组变量,如下图所示。

3.使用内爆函数将数组连接到具有连接字符-的字符串中。

4.输出连接后的字符串,如下图所示。

5.预览效果如图所示。

6.用implode函数使数组拼接成字符串,连接符为?完成如下。

参考技术A with temp as
(
select name as text from a
)
select substr(text,instr(text,',',1,rn)+1,instr(text,',',1,rn+1)-instr(text,',',1,rn)-1) text from
(
select ','||t1.text||',' text,t2.rn from
(select text,length(text)-length(replace(text,',',''))+1 rn from temp) t1,
(select rownum rn from all_objects where rownum <= (select max(length(text)-length(replace(text,',',''))+1) rn from temp)) t2
where t1.rn >= t2.rn order by text,rn
)

用这种方法可以处理name这一列,如果你想ID、NAME都先显示的话,就要写成一个函数来调用了。本回答被提问者采纳
参考技术B 这个一条SQL我没实现过,
原来项目中遇到过类似的需求,也是在网上找的,这么解决的
首先建立一个type
CREATE OR REPLACE TYPE "TY_STR_SPLIT" IS TABLE OF VARCHAR2 (4000);
然后建立一个函数

CREATE OR REPLACE FUNCTION fn_split (p_str IN VARCHAR2, p_delimiter IN VARCHAR2)
RETURN ty_str_split
--功能描述:用指定分隔符切割输入的字符串,返回一维数组,每个数组元素为一个子串。

IS
j INT := 0;
i INT := 1;
len INT := 0;
len1 INT := 0;
str VARCHAR2 (4000);
str_split ty_str_split := ty_str_split ();
BEGIN
len := LENGTH (p_str);
len1 := LENGTH (p_delimiter);

WHILE j < len
LOOP
j := INSTR (p_str, p_delimiter, i);

IF j = 0
THEN
j := len;
str := SUBSTR (p_str, i);
str_split.EXTEND;
str_split (str_split.COUNT) := str;

IF i >= len
THEN
EXIT;
END IF;
ELSE
str := SUBSTR (p_str, i, j - i);
i := j + len1;
str_split.EXTEND;
str_split (str_split.COUNT) := str;
END IF;
END LOOP;

RETURN str_split;
END fn_split;

然后使用查询TABLE函数
SELECT * FROM TABLE (CAST (fn_split ('a,b,c', ',') AS ty_str_split ) );

可以达到类似的效果。
参考技术C 我觉得这种存储后展现方式违反数据库设计范式了。追问

那先不考虑主键 就一个 NAME 字段 数据是上述的形式, 语句该怎么写

追答

违反设计范式就用sql实现不了啊,你的展现方式想法不对。

追问

既然有这个需求,为什么sql实现不了?? 不过还是谢谢了

参考技术D id 是主键么?是主键能那么整吗?

追问

是主键, 关键 我现在就是想 要把这个拆开多行显示 ,那要不是主键该怎么弄

追答一张table里面不存在主键,是不健全的
主键具有唯一特性
你那么弄明显不合理,更不符合逻辑

追问

大神,我就要个语句啊,不问那么多,给我语句就好了,谢谢了

以上是关于oracle如何将多个值放在一个字段里面 用逗号隔开的主要内容,如果未能解决你的问题,请参考以下文章

Mysql 数据字段值是用逗号隔开,如何写SQL语句

Mysql 数据字段值是用逗号隔开,如何写SQL语句

Oracle中某一表单中的字段里的存放的值为逗号隔开另一表单字段中的多个值,该如何取值

用逗号格式化数字以在 Python 中分隔千位

mysql查询某数字在某字段以逗号隔开的字符里面

oracle 以‘’分割的长字段拆分成多个(很多)字段