`
小余不多余
  • 浏览: 3753 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

Oracle逗号分隔列转行匹配多条记录

阅读更多
  当你在开发会员系统时,一定会遇到在一个字段中,用逗号或其他符号分隔存储多个信息的情况。例如:保存某个用户的一对多权限时,在权限组这个字段中,就会以逗号分隔保存多个权限编号。
    那么,现在假设给出某一个权限编号,要去检索出包含这个权限的所有用户记录集合,该怎么去写这个sql语句呢?分析:这时就需要在逗号分隔的多个权限编号字段中去匹配给出的这个权限编号。如果使用like去做,一则效率不高,二则匹配不精确。因此用到了逗号分隔列转行的方法。目前该方法只适合在Oracle数据库中使用。该方法只需要sql语句就可以实现列转行。
    下面给出该方法的示例:
    select a,b,c from
    (with test as (select 'aaa' a,'bbb' b,'1,2,3' c from dual)
    select a,b,substr(t.ca,instr(t.ca, ',', 1, c.lv) + 1,instr(t.ca, ',', 1, c.lv + 1) - (instr(t.ca, ',', 1, c.lv) + 1)) AS c
    from (select a,b,',' || c || ',' AS ca,length(c || ',') - nvl(length(REPLACE(c, ',')), 0) AS cnt FROM test) t,
    (select LEVEL lv from dual CONNECT BY LEVEL <= 100) c where c.lv <= t.cnt )
    执行以上代码,结果如下图:




    模拟数据列 c 中的内容"1,2,3"被转成了三行,前面两列的内容同时附带过去。在实际运用时,只要把
    select 'aaa' a,'bbb' b,'1,2,3' c from dual 替换成实际需要转换的数据表中的字段即可,其中c字段必须是要进行转换的保存逗号分隔内容的字段。下面的内容都可以不需要更改。其中"LEVEL <= 100"中的数字100代表匹配字段内容中出现逗号的次数,可以自行更改。
分享到:
评论

相关推荐

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

    因此用到了逗号分隔列转行的方法。目前该方法只适合在oracle数据库中使用。该方法只需要sql语句就可以实现列转行。  下面给出该方法的示例: select a,b,c from(with test as (select ‘aaa’ a,’bbb’ b,’1,2,3...

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

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

    oracle wm_concat 列转行 逗号分隔

    Oracle中的WM_CONCAT函数是一个非标准的聚合函数,主要用于将多行数据合并成单行,以逗号分隔的形式返回。这个函数在处理特定的数据汇总和报告需求时非常有用,尤其是在你需要将某个列的多个值合并成一个字符串时。...

    oracle中实现列转行实例

    oracle中实现列转行实例,有表的创建,数据的插入,查询的sql

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

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

    oracle行转列,列转行的例子

    oracle行转列,列转行的例子

    Oracle的列转行问题

    要将这些列数据转换为行,传统的做法是使用`UNION ALL`来合并多条SELECT语句,但这种方法会导致多次访问数据,从而影响性能。 作者提出了一个创新的解决方案,利用`DECODE`函数配合子查询来实现列转行,以提高查询...

    oracle查询表的所有列并用逗号隔开

    在Oracle数据库环境中,有时我们需要获取一个表的所有列名,并且以特定格式(如逗号分隔)输出这些列名。这种需求通常出现在多种场景中,比如动态SQL构建、数据迁移或者系统日志记录等。本篇文章将详细介绍如何在...

    oracle的列转行问题

    Oracle 列转行问题解决方案 Oracle 数据库中,列转行问题是一个非常传统的话题。在这个问题中,我们需要将行数据转换成不同的列表示,或者将不同的列数据写到同一列的不同行上。这种问题在实际应用中非常常见,如将...

    oracle字段分隔为多行显示

    比如一个字段'11,22,22,33,44',一个查询语句显示成4行,就可以这样来实现。 11 22 22 33 44

    ORACLE 列转行 DECODE函数用法

    DECODE函数在处理列转行的问题时,尤其适用于将多列数据合并到一行中,使得数据展示更加简洁明了。下面我们将详细讲解DECODE函数的使用方法以及如何在列转行操作中应用它。 DECODE函数的基本语法如下: ```sql ...

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

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

    oracle 关于字符串中带有逗号间隔的查询.doc

    在Oracle数据库中,进行字符串查询时,特别是当字符串中包含逗号等特殊字符时,我们需要巧妙地使用SQL的LIKE操作符来实现精确匹配。这里,我们面对的问题是想要查询DWDH字段中含有"飞信"但不包含"移动飞信"或"飞信...

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

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

    Oracle左连接返回多条记录中一条记录的查询语句

    Oracle左连接返回多条记录中一条记录的查询语句,更具指定条件分组排序,返回各组中第一条记录

    列转行小工具

    在Oracle Developer中,"列转行小工具"是一种实用功能,它主要用于处理数据库表中的数据,将多列数据转换为单列数据,通常涉及到的是数据的行列转换操作。这种操作在处理复杂的数据分析、报表生成或者接口对接时非常...

    oracle的列转行函数

    SELECT TRIM(',' FROM SYS.STRAGG(A_NAME||NVL2(A_NAME,',','')))as nams FROM A_TEMP

Global site tag (gtag.js) - Google Analytics