Oracle——connect by (Level/Rownum) 的一些用法


1.字符串‘A,B,C,D’ , 根據‘,’轉列。

 SELECT REGEXP_SUBSTR('A,B,C,D',  '[^,]+',   1,   ROWNUM)
   FROM DUAL 
CONNECT BY ROWNUM <= REGEXP_COUNT('A,B,C,D',  '[,]',  1) + 1;

 2.生成10個隨機數

SELECT ROWNUM RN, ROUND(DBMS_RANDOM.VALUE(0, 1000),2) RANDOM
  FROM DUAL
CONNECT BY ROWNUM <= 1000;

 擴展:DBMS_RANDOM是Oracle提供的一個PL/SQL包,用於生成隨機數據和字符。它具有以下函數。

       其中,initialize,random,terminate函數在Oracle11g中已不推薦使用,主要用於向后兼容。

  • INITIALIZE : 初始化DBMS_RANDOM值,使在不同的會話中,不同的用戶下,隨機生成的值一樣。
  • NORMAL :函數返回服從正態分布的一組數。此正態分布標准偏差為1,期望值為0。這個函數返回的數值中有68%是介於-1與+1之間,95%介於-2與+2之間,99%介於-3與+3之間。
  • RANDOM:返回值的范圍為: [-2^31, 2^31),返回的是整數。語法:DBMS_RANDOM.RANDOM('范圍起','范圍止'),不帶參數返回整數。
  • SEED: 功能和INITIALIZE函數類似,實際上,INITIALIZE函數被淘汰,推薦的替代函數即是SEED函數。與INITIALIZE函數不同的是SEED函數同時支持數值和字符作為種子值,而INITIALIZE函數只支持數值。
  • STRING:隨機生成字符串  語法:DBMS_RANDOM.STRING('字符串格式','字符串長度')

3.列出兩個月份之間所有的月份/兩個星期之間所有的天

SELECT TO_CHAR(ADD_MONTHS(DATE '2009-03-01', ROWNUM - 1), 'YYYY-MM') MONTHS
  FROM DUAL
CONNECT BY ROWNUM <= MONTHS_BETWEEN(DATE '2010-03-01', DATE '2009-03-01') + 1;

SELECT TO_CHAR(DATE'2009-05-11' + ROWNUM - 1, 'YYYY-MM-DD') AS DAYS
FROM DUAL
CONNECT BY ROWNUM <= DATE'2009-05-23' - DATE'2009-05-11' + 1

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM