zoukankan      html  css  js  c++  java
  • oracle 字符串 正则表达式 拆分,排序,合并

    需求,表数据如:要求圈中的数据,必须根据线芯有序排列。

    思路: 1、首先根据分号分隔元素。oracle 很蛋疼,没有提供字符串分隔函数,网上倒是多觉得有点麻烦,耐着性子继续网上找了下,还真让我找到一篇博客,那已是年前了。今天找了一片还没找到。

          如:避免了oracle 的定义参数类型,字符串分隔函数。

          

            2、元素排序这个大家都懂。

      3、合并,这个用的是 wm_concat 函数,11g后才有 

    最终效果:

      

         

    sql:

    SELECT
        wm_concat(core_idf || ';')
    FROM
        (
            SELECT
                core_idf
            FROM
                (
                    SELECT
                        regexp_substr('红:6.28,;黄:5.30,;蓝:2.30,;', '[^;]+', 1, ROWNUM) AS core_idf
                    FROM
                        dual
                    CONNECT BY
                        ROWNUM <= length(regexp_replace('红:6.28,;黄:5.30,;蓝:2.30,;', '[^;]', NULL))
                ) temp
            ORDER BY
                core_idf
        );
    

    问题点:

    1、上客户环境遇到一个 数据类型不匹配问题,
    原因是wm_concat 函数 返回的是clob 不能转 varchar ,采用了tochar强转。

    2、观察数据还发现 wm_concat 不会根据子查询的顺序拼接(即使子查询排过序,也无效),又必须要顺序拼接,只能抛弃了

      根据这个现象在网上找到了 (listagg(info,'';,'') within group(order by UPLOAD_TIME desc) ,完美解决了拼接排序问题!

      和 wm_concat 相比,listagg还能自定义拼接分隔符,据说 wm_concat 是一个非公开函数,在10g前使用,在11g后推荐使用 listagg

  • 相关阅读:
    easyui改变tab标题
    java获取request中的参数、java解析URL问号后的参数
    java生成word文档
    jquery即时获取上传文件input file文件名
    微信公众号开发(三)
    Linux中文乱码 更改Linux字符集
    微信公众号开发(五)
    NSCache
    MIT神技术绘制用户界面至任意物体
    导弹工厂到摩托车间:制造业如何应用大数据
  • 原文地址:https://www.cnblogs.com/kunsyliu/p/10368709.html
Copyright © 2011-2022 走看看