zoukankan      html  css  js  c++  java
  • Oracle中使用REGEXP_SUBSTR,regexp_replace,wm_concat函数

    REGEXP_SUBSTR函数格式如下:
    function REGEXP_SUBSTR(String, pattern, position, occurrence, modifier)
    __srcstr     :需要进行正则处理的字符串
    __pattern    :进行匹配的正则表达式
    __position   :起始位置,从第几个字符开始正则表达式匹配(默认为1)
    __occurrence :标识第几个匹配组,默认为1
    __modifier   :模式('i'不区分大小写进行检索;'c'区分大小写进行检索。默认为'c'。)
    实际应用如下:在oracle中,使用一条语句实现将'123,456,789'拆分成'123','456','789'的集合。
    1.select REGEXP_SUBSTR('123,456,789', '[^,]+', 1, 1) value from dual;
    结果是:123

    2.select REGEXP_SUBSTR('123,456,789', '[^,]+', 1, 3) value from dual;

    结果是:789

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

    1. select level from dual connect by level < 5;

    结果是:

    --1

    --2

    --3

    --4

    将上面REGEXP_SUBSTR和connect by level 关联 使用

    select TRIM(REGEXP_SUBSTR('123,456,789', '[^,]+', 1, level)) value from dual connect by level <= 3;

    结果是:

    --123

    --456

    --789

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

    select REGEXP_SUBSTR('123,456,789', '[^,]+', 1, level) value
    from dual
    connect by level <= length(regexp_replace('123,456,789', '[^,]*')) + 1;

    结果是:

    --123

    --456

    --789

    regexp_replace函数:

    1. select regexp_replace('123,456,789', '[^,]+','q') from dual;

    结果:

    --q,q,q

    2. select regexp_replace('123,456,789', '[^,]+') from dual;

    结果:

    ,,

    wm_concat函数

    该函数可以把列值以","号分隔起来,并显示成一行

    效果:

    select t.id_cssp_user from cssp_user_info t where rownum < 5;

    select to_char(wm_concat(t.id_cssp_user))
    from cssp_user_info t
    where rownum < 5;

    select t.mobile, to_char(wmsys.wm_concat(t.user_name))
    from cssp_user_info t
    where rownum<100
    group by t.mobile
    having count(0) > 1;

    
    
  • 相关阅读:
    Objective-C 数据集合
    iOS PresentViewControlle后,直接返回根视图
    NSMutableString 常用操作
    NSString 的常用操作
    iOS 获取网络状态
    C#属性封装
    C#类的一些概念
    ref和out 传递参数(C#)
    C#字符串的恒定性
    C#方法的重载和方法的可变参数
  • 原文地址:https://www.cnblogs.com/gexiaoshan/p/5683846.html
Copyright © 2011-2022 走看看