1.Oracle產生隨機數 oracle數據庫中有產生隨機數的函數 DBMS_RANDOM
一)生成0到1之間的小數,包括0不包括1
SELECT DBMS_RANDOM.VALUE FROM DUAL;
二)生成隨機正態分佈數
SELECT DBMS_RANDOM.VALUE(0,100) FROM DUAL; //生成0-100範圍內的小數,包括0不包括100
三)生成指定範圍內的整數
SELECT TRUNC(DBMS_RANDOM.VALUE(0,100)) FROM DUAL; //生成0-100範圍內的整數,包括0不包括100
四) 生成正態分佈的隨機數
SELECT DBMS_RANDOM.NORMAL FROM DUAL;
五)生成隨機字符串
SELECT DBMS_RANDOM.STRING('參數1' , '參數2') FROM DUAL;
必須要指定兩個參數,參數1用於指定生成隨機字符串的類型,參數2用於指定生成隨機字符串的長度。 其中參數1 的取值有:‘U’ 指生成大寫的字符 ‘L’ 指生成小寫的字符 ‘X’ 數字和大寫的字母 ‘A’ 大小寫混合的字符 ‘P’ 可打印的字符
例如: SELECT DBMS_RANDOM.STRING('X', 3) FROM DUAL; //生成長度爲3的 類型是大寫字母和數字的字符串
六)生成預期範圍內的日期,比如我想要從2016年1月1日到2016年年底內任意的日期類型的數據,注意沒有時分秒的具體數值。
第一步: 獲得一個2016年1月1日的基數 SELECT TO_CHAR(TO_DATE('01/01/2016','MM/DD/YYYY','J')) //得到一個2457389基數
第二步: SELECT TO_DATE(TRUNC(DBMS_RANDOM.VALUE(2457389,2457389+364)), 'J' ) FROM DUAL; //得到2016-01-01 至 2016-12-30的隨機日期
2.常用的處理函數
3. case when 函數
--簡單Case函數
CASE sex
WHEN '1' THEN '男'
WHEN '2' THEN '女'
ELSE '其他'
CASE
WHEN sex = '2' THEN '女'
ELSE '其他'
比如可以用case函數統計 分數在一些區間段的 人數的總數
select
case
when tb.score >= 80 then '優秀'及格
when tb.score <80 and tb.score >= 60 then '及格'
else '不及格'
end 區間,
concat(count(1),'人') 人數
from tablename tb
group by
case
when tb.score >= 80 then '優秀'
when tb.score <80 and tb.score >= 60 then '及格'
else '不及格'
end;
查詢結果如下顯示:
區間 | 人數 |
優秀 | 10人 |
及格 | 6人 |
不及格 | 5人 |
可以對一個表中的不同類型的數據做一個統計
select
country,
sum(case when tb.sex=1 then '1' else '0' end) 男性人口,
sum(case when tb.sex=2 then '2' else '0' end) 女性人口
from tablename tb
group by country
update table
set salary =
case when sarlay >= 8000 then salary*0.90
when salary <4000 then salary*1015
else salary
end
這樣可以一次就對整張表進行了更新,並且不會有數據前後產生的錯誤性
4. ORACLE的MERGE INTO 用法
/*語法:MERGE [INTO [schema .] table [t_alias]
USING [schema .] { table | view | subquery } [t_alias]
ON ( condition )
WHEN MATCHED THEN merge_update_clause
WHEN NOT MATCHED THEN merge_insert_clause;
*/
/*語法
MERGE INTO [your table-name] [rename your table here]
USING ( [write your query here] )[rename your query-sql and using just like a table]
ON ([conditional expression here] AND [...]...)
WHEN MATHED THEN [here you can execute some update sql or something else ]
WHEN NOT MATHED THEN [execute something else here ! ]
*/
5. 如何把一個子查詢的多個選擇排成一列顯示
Oracle中提供了兩個函數一、WMSYS.WM_CONCAT(table_name) 這個函數默認是把查出來的數據用逗號連接 數據類型是<CLOB>類型
例如 表名 table A
ID | NAME |
1 | AA |
2 | BB |
3 | CC |
SELECT WMSYS.WM_CONCAT(NAME) FROM A
查詢出來的結果是 AA,BB,CC
SELECT REPLACE(WMSYS.WM_CONCAT(NAME),',','|') FROM A
查詢出來的結果是AA|BB|CC
二、可以使用LISTAGG函數表名B
dept_no | name |
10 | 張三 |
10 | 李四 |
10 | 王五 |
20 | 趙六 |
20 | 馬奇 |
SELECT DEPT_NO, LISTAGG(NAME,'|') WITHIN GROUP (ORDER BY NAME) AS NAMES FROM B GROUP BY DEPT_NO
查詢出來的結果是 dept_no names
dept_no | names |
10 | 李四|王五|張三 |
20 | 馬奇|趙六 |
注意:WITHIN GROUP (ORDER BY ***) 字段不能少 這是聚合分析類函數