Oracle——connect by (Level/Rownum) 的一些用法
阿新 • • 發佈:2020-07-23
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;
擴充套件:
其中,initialize,random,terminate函式在Oracle11g中已不推薦使用,主要用於向後相容。
- INITIALIZE :初始化DBMS_RANDOM值,使在不同的會話中,不同的使用者下,隨機生成的值一樣。
- NORMAL :函式返回服從正態分佈的一組數。此正態分佈標準偏差為1,期望值為0。這個函式返回的數值中有68%是介於-1與+1之間,95%介於-2與+2之間,99%介於-3與+3之間。
- RANDOM:返回值的範圍為:[-2^31, 2^31),返回的是整數。語法:
- 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