多行轉換成字串

來源:互聯網
上載者:User

之前寫程式,費老大勁實現了多行轉換成字串,結果因為SQL過於複雜被否了,然後就一頓改成在JAVA代碼裡處理查詢結果返回指定格式。

以下藉助學習trunc截取時間函數來做一個多行轉換成字串的例子。

 

--trunc截取當前月份第一天trunc(sysdate,'MM')
--wmsys.wm_concat()實現多行轉換成字串
select wmsys.wm_concat(monthDate)
  from (select trunc(sysdate, 'MM') + rownum - 1 monthDate
          from dual
        connect by rownum <= to_number(to_char(last_day(SYSDATE), 'DD')));

--SYS_CONNECT_BY_PATH實現多行轉換成字串,用逗號串連;需要先產生遞迴樹
select substr(max(sys_connect_by_path(monthDate, ',')), 2)
  from (
        ---child和parent根據rownum產生層次關係
        select monthDate, rownum parent, rownum + 1 child
          from (select trunc(sysdate, 'MM') + rownum - 1 monthDate
                   from dual
                 connect by rownum <=
                            to_number(to_char(last_day(SYSDATE), 'DD'))))
 start with parent = 1
connect by prior child = parent;

 

剛才在論壇了看到了cnwz自己寫的函數,才意識到這個當初自己也可以寫函數實現的,收藏一下:

 

function str_cat( key_name in varchar2,key in varchar2,coname in varchar2,tname in varchar2 ) return varchar2
/*
    功能:根據指定的表名、串連欄位名、關鍵字段名及值,返回字串欄位的串連值(類似彙總函式)
    輸入參數:
          key_name:用於判斷的關鍵字段名,字串(大寫,可以是運算式)
          key:用於判斷的關鍵字段值,字串(大寫,可以是運算式)
          coname:串連的欄位名,字串(大寫)
          tname:輸入,表名,字串(大寫)
    傳回值:串連後的字串(分隔字元:,)
*/
is
    str    varchar2(4000);
    sep    varchar2(2);
    val    varchar2(4000);
    cur    SYS_REFCURSOR;
begin
    open cur for 'select '||coname||' from '|| tname || ' where ' || key_name || ' = ' using key;
    loop
        fetch cur into val;
        exit when cur%notfound;
        str := str || sep || val;
        sep := ', ';
    end loop;
    close cur;
    return str;
end;

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.