`

Oracle中某个字段里的值为逗号隔开的多个值

 
阅读更多
最近遇到很变态的问题,某字段与另一表有字段关联关系,单位这字段存放的值是多个以逗号隔开的ID,改如何处理的问题,网上搜了下遇到此问题的人还挺不少,给一网友的问题整理了一下,转过来学习一下:

表a:
a_usr_id(字符串型,关联表b的usr_id)
123,124,125
表b:
usr_id ,   usr_name,
123        name1
124        name2
125        name3

直接用用sql语句,不用存储过程如何取得这样的数据集合:

name1,name2,name3

解决方案:

SQL> select * from test;
A_URS_ID
--------------------------------------------------
123,125
123,124,125

SQL> select * from test1;

URS_ID     URS_NAME
---------- --------------------
123        name1
124        name2
125        name3

SQL> with split_data as (
         select key, rn, substr(str, instr(str, ',', 1, rn)+1,
                                instr(str, ',', 1, rn+1) - instr(str, ',', 1, rn) - 1) str
            from (select a_urs_id key, ','||a_urs_id||',' str from test) a,
                (select rownum rn from dual connect by rownum < 10) b
         where instr(str, ',', 1, rn+1) > 0 )
     select key, substr(max(sys_connect_by_path(urs_name, ',')), 2) a_name
         from split_data a, test1 b
         where a.str = b.urs_id

       start with rn = 1
      connect by key = prior key and rn-1 = prior rn
      group by key;

KEY                  A_NAME
-------------------- ------------------------------------------------------------
123,124,125          name1,name2,name3
123,125               name1,name3



附原文地址:  http://www.oracle.com.cn/viewthread.php?tid=75324

另参考:  http://www.233.com/oracle/zonghe/20110704/161631965.html
分享到:
评论

相关推荐

    oracle sql 某列的值按照逗号分割显示成多行.sql

    oracle 某列存儲的值是有逗號的字符串,希望通過逗號分隔開來顯示多行。sql,有預期結果,有項目實戰。

    oracle 存储过程中某入参是逗号分隔,并且参数要使用在in过滤语句中

    oracle存储过程中入参是逗号分隔,并且参数要使用在in过滤语句中查询数据。处理的方法与实现

    oracle实现行转列功能,并使用逗号进行隔开拼接,成为一条数据.pdf

    Oracle 中实现行转列功能,并使用逗号进行隔开拼接,成为一条数据是指将多行数据合并成一行数据,并用逗号分隔每个字段的值。这种功能在实际应用中非常有用,例如在报表生成、数据分析和数据整合等场景中。 在 ...

    Oracle字段根据逗号分割查询数据的方法

    总结来说,Oracle字段根据逗号分割查询数据的方法利用了正则表达式和层次查询,提供了灵活且精确的解决方案。通过理解这些技术,我们可以有效地处理存储在单个字段中的分隔值查询。同时,也应关注其潜在的性能影响,...

    oracle 多选字典项翻译

    该函数主要对oracle 中数据表中存在的多选字典值进行翻译

    Oracle 增加修改删除字段

    如果需要同时添加多个字段,可以在`ADD`后面列出多个字段定义,用逗号隔开: ```sql ALTER TABLE test1 ADD (name VARCHAR2(30) DEFAULT 'prg' NOT NULL, age INTEGER DEFAULT 22 NOT NULL, has_money NUMBER(9,2))...

    MySQL将一个字段中以逗号分隔的取出来形成新的字段实现

    在MySQL数据库中,经常遇到需要处理以逗号分隔的字段值的情况,这些字段通常用于存储多值数据,比如在本例中,`related_shop_ids`字段存储了多个商店ID,用逗号分隔。本篇文章将详细讲解如何将这样的字段拆分成多个...

    Oracle 两个逗号分割的字符串,获取交集、差集(sql实现过程解析)

    Oracle数据库的两个字段值为逗号分割的字符串,例如:字段A值为“1,2,3,5”,字段B为“2”。 想获取两个字段的交集(相同值)2,获取两个字段的差集(差异值)1,3,5。 一、最终实现的sql语句 1、获取交集(相同值)...

    Oracle逗号分隔列转行实现方法

    那么,现在如果给出一个权限编号,要去检索出用后这个权限的用户集合,就会需要在逗号分隔的多个权限编号中去匹配给出的这个权限编号。如果使用like去做,一则效率不高,二则匹配不精确。因此用到了逗号分隔列转行的...

    oracle将以逗号分隔字符串转多行

    在这个例子中,`[^,]+`是一个正则表达式,表示匹配任何非逗号字符的一个或多个实例。参数`1, LEVEL`是指从字符串的第1个字符开始,按层级提取子字符串,这里的`LEVEL`随着层次查询递增。 2. **REPLACE**: `...

    Oracle如何实现like多个值的查询

    某天客户有一个需求,给定一批的手机号码或者电话号码,查询出相关的通话记录,以及相关的一些信息。 客户给定的被叫号码如图所示: 查询出来的结果如下图所示(本批次的结果不是上图导入的结果查询的,为了格式...

    oracle中将列拼接字段函数

    与SQL中的`||`运算符不同的是,`WM_CONCAT`可以接受多个参数并将它们连接起来形成一个单一的字符串,特别适用于需要合并多个列值的情况。此函数通常用于返回一个由指定的列或表达式组成的列表,其中每个元素之间可以...

    oracle删除表字段和oracle表增加字段

    添加字段的语法:alter table tablename add (column datatype [default value][null...添加、修改、删除多列的话,用逗号隔开。 使用alter table 来增加、删除和修改一个列的例子。 创建表结构:create table test1(id

    oracle列合并的实现方法

    wmsys.wm_concat将字段的值用”,”来隔开。 select id,wm_concat(name) from tab_name group by id; 二、使用sys_connect_by_path sys_connect_by_path(字段名, 2个字段之间的连接符号),这里的连接符号不要使用...

    如何通过txt文件批量导入数据到oracle数据库

    1. **准备TXT文件**:整理TXT文件,确保每一行代表一条记录,每个字段之间用分隔符隔开。如果数据中包含特殊字符,如逗号、引号等,可能需要进行转义处理。 2. **创建Oracle表**:在Oracle数据库中创建一个与TXT...

    Oracle9i的init.ora参数中文说明

    说明: (如果值为 TRUE) 当在隐式转换中丢失数据时返回错误的参数。 值范围: FALSE | TRUE 默认值: TRUE nls_numeric_characters: 说明: 指定将用作组分隔符和小数位的字符。组分隔符就是用来分隔整数位组 (如千, ...

    oracle常用

    - 将多个字符串连接成一个字符串,中间用逗号隔开。 示例: ```sql SELECT wm_concat(name) FROM table_name; ``` **7. `initcap(a)`** 此函数用于转换字符串的大小写格式。 - 将字符串中的每个单词的首字母...

    Oracle中用GROUPING SETS分组自定义汇总

    `GROUPING SETS`的语法结构清晰,`list`表示需要分组的列序列,通过逗号分隔,多个`list`之间用括号和逗号隔开。如果需要包含所有级别的汇总,可以添加一个空的`(NULL)`分组集。`GROUPING_ID`函数可以用来标识当前行...

    oracle使用sql语句增加字段示例(sql删除字段语句)

    同时添加多个字段,只需将每个字段定义用逗号隔开即可: ```sql alter table test1 add (name varchar2(30) default '无名氏' not null, age integer default 22 not null, has_money number(9,2)); ``` 接下来是...

Global site tag (gtag.js) - Google Analytics