`
wuyafeng123
  • 浏览: 24367 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

oracle 中 如何将某行的单元格数据拆分成多行记录

阅读更多

   在项目实施阶段,遇到这样的情况,原始设计是将附件的地址存放在一个单元格中,这个单元格后期务必要改为clob类型,最后根据附件地址取值时,需要将地址根据 特殊标识 来拆分。确实比较恶心 ,但是没法,附件涉及到太多的功能模块,重新设计表结构不太现实,
这时候 oracle的regexp_subter函数就派上用场了。
    下面看一下它的具体用法吧

SELECT num,
    OAFileId,
    REGEXP_SUBSTR(CPMIS_OA_FILES.DownloadURL2,'[^;]+',1,num) AS downloadurl
  FROM CPMIS_OA_FILES ,
    (SELECT LEVEL num FROM DUAL CONNECT BY LEVEL<=100
    )
  WHERE num <=LENGTH(CPMIS_OA_FILES.DownloadURL2) - LENGTH(REPLACE(CPMIS_OA_FILES.DownloadURL2,';'))+1

Oracle中REGEXP_SUBSTR函数



Oracle中REGEXP_SUBSTR函数的使用说明:



题目如下:

在oracle中,使用一条语句实现将'17,20,23'拆分成'17','20','23'的集合。



REGEXP_SUBSTR函数格式如下:

function REGEXP_SUBSTR(String, pattern, position, occurrence, modifier)

__srcstr     :需要进行正则处理的字符串

__pattern    :进行匹配的正则表达式

__position   :起始位置,从第几个字符开始正则表达式匹配(默认为1)

__occurrence :标识第几个匹配组,默认为1

__modifier   :模式('i'不区分大小写进行检索;'c'区分大小写进行检索。默认为'c'。)



1、查询使用正则分割后的第一个值,也就是17

[sql]

SELECT REGEXP_SUBSTR('17,20,23','[^,]+',1,1,'i') AS STR FROM DUAL; 

结果:  www.2cto.com 

STR

-----

17



2、查询使用正则分割后的最后一个值,也就是23

[sql]

SELECT REGEXP_SUBSTR('17,20,23','[^,]+',1,3,'i') AS STR FROM DUAL; 

结果:

STR

----

23



3、获取一个多个数值的列,从而能够让结果以多行的形式展示出来

[sql]

SELECT LEVEL FROM DUAL CONNECT BY LEVEL <=7; 

结果:  www.2cto.com 

LEVEL

----

1

2

3

4

5

6

7



4、将上面REGEXP_SUBSTR的occurrence关联

[sql]

SELECT NVL(REGEXP_SUBSTR('17,20,23', '[^,]+', 1, LEVEL, 'i'), 'NULLL') AS STR 

  FROM DUAL 

CONNECT BY LEVEL <= 7; 

STR  www.2cto.com 

----

17

20

23

NULL

NULL

NULL

NULL



5、优化上面的SQL语句,让生成的行的数量符合实际情况

[sql]

SELECT REGEXP_SUBSTR('17,20,23', '[^,]+', 1, LEVEL, 'i') AS STR 

  FROM DUAL 

CONNECT BY LEVEL <= 

           LENGTH('17,20,23') - LENGTH(REGEXP_REPLACE('17,20,23', ',', ''))+1; 

STR

----

17

20

23
分享到:
评论

相关推荐

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

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

    oracle数据库一行拆成多行.sql

    oracle数据库一行拆成多行.sql

    SQL 语句 将一个表中用特殊字符分割的字段转换成多行数据.docx

    在数据库中,经常会遇到将一个字段中的特殊字符分割的字符串转换成多行数据的情况。这是一个常见的需求,但是网上提供的解决方案往往非常复杂,难以理解和实现。为了解决这个问题,我们可以创建一个字符串分割函数,...

    Oracle多行记录合并

    在Oracle数据库中,多行记录的合并通常是为了将相同字段的多行数据整合成一行,以便于数据分析或者简化展示。这种操作在报表制作、数据整理等场景中非常常见。本篇文章将详细介绍Oracle中实现多行记录合并的几种方法...

    Oracle 分割字符串 返回多行数据

    Oracle 分割字符串 返回多行数据

    Oracle数据行拆分多行方法示例

    在Oracle数据库管理中,有时我们需要将一行数据拆分为多行,以便进行更细致的数据处理或分析。本篇文章主要探讨了四种不同的方法来实现这一需求,适用于单行和多行数据的拆分。以下是对这些方法的详细解释: 1. ...

    一列分割成多列,多行合并为一行

    SQL语句用with将列分割成多列存为临时表,再将多行某个字段拼接合并为一行

    Oracle字段转字符串/多行记录合并/连接/聚合字符串的几种方法

    在Oracle数据库中,有时我们需要将多个字段值转换为单个字符串,或者将多行记录合并成一行,这在数据处理和报告生成时尤其常见。Oracle提供了多种方法来实现这一目标,包括使用内置函数、PL/SQL过程以及一些高级特性...

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

    例如,'徐风年'的`teststr`是'洛阳,贾家嘉,姜姒,鱼幼薇,裴南苇,红薯',这些值将在查询中被拆分成多行。 6. **查询结果**: 最终的查询将返回每个`name`对应的`teststr`中的每个元素,以单独的行显示,不再包含逗号...

    oracle某个字段多行记录转化为一行

    此标题明确指出了解决的问题:在Oracle数据库中,如何将特定字段的多行记录合并成一行记录。这种需求通常出现在报告或数据分析的过程中,当需要将多个相关的值组合在一起进行展示或进一步处理时。 ### 描述理解 ...

    Oracle 多行记录合并_连接_聚合字符串的几种方法_oracle_脚本之家1

    Oracle数据库在处理多行记录合并、连接和聚合字符串时,有多种方法,下面将详细介绍其中的几种常见技术。 1. 被集合字段范围小且固定型 这种方法适用于字段值有限且已知的情况。通过使用`DECODE`函数,我们可以为每...

    ORACLE多行记录合并

    多行记录合并 采用的是方法4,希望对你们有用

    sql实现多行合并一行

    在SQL中,有时候我们需要将查询结果中多行的数据合并成一行,这在处理某些特定的报表或数据分析时非常有用。这种技术通常被称为行合并或行聚合。在本例中,我们将探讨如何使用纯SQL实现这一功能,特别是针对Oracle...

    oracle10g,9i多行合并一行函数

    在Oracle数据库系统中,经常需要将多个行的数据合并成单行显示,尤其是在处理报告或者需要将多个值组合成一个字符串的情况下。本文将详细介绍如何在Oracle 10g与9i版本中实现这一功能,并分别提供具体的实现方法。 ...

    oracle多行合并一行

    在Oracle数据库中,有时候我们需要将多行数据合并成一行进行展示或处理,尤其是在报表生成、数据展示等场景中。本文将详细介绍如何使用Oracle纯SQL语句实现这一功能,并通过具体示例来帮助理解。 #### 一、问题背景...

    oracle多行转为字符串总结

    介绍了将多行转为字符串的三种方案,并比较了三种方案的执行效率. 1.sys_connect_by_path + start with ... connect by ... prior + 分析函数 2.自定义Function/SP 3.使用 Oracle 10g 内置函数 wmsys.wm_concat

    表中数据多行转1行多列

    表中数据多行转1行多列

    sqlserver中访问ORACLE返回1行数据

    ### SQL Server 中访问 Oracle 返回 1 行数据 #### 问题背景 在企业级应用环境中,经常需要在不同的数据库系统之间进行数据交换或共享。其中一种常见的情形是从 SQL Server 数据库环境中查询 Oracle 数据库的数据...

Global site tag (gtag.js) - Google Analytics