聖誕水晶球
2010年12月7日 星期二
2010年8月5日 星期四
2010年7月27日 星期二
oracle 日期計算
1 | 日期運算 |
2 | |
3 | 1. 更改日期顯示的format |
4 | ex. |
5 | ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY/MM/DD'; |
6 | 階段作業已被更改 |
7 | |
8 | select sysdate from dual; |
9 | |
10 | SYSDATE |
11 | ---------- |
12 | 2007/09/20 |
13 | |
14 | --只對目前session有效,一個 connect 視為一個 session |
15 | |
16 | 2. 日期 + 數值 |
17 | ex. |
18 | select sysdate + 10 from dual; |
19 | |
20 | SYSDATE+10 |
21 | ---------- |
22 | 01-OCT-07 |
23 | |
24 | 3. 日期 - 數值 |
25 | ex. |
26 | select sysdate - 10 from dual; |
27 | |
28 | SYSDATE-10 |
29 | ---------- |
30 | 11-SEP-07 |
31 | |
32 | 4. 日期相減得到日期差 |
33 | ex. |
34 | select sysdate - to_date('20070901','yyyymmdd') aa from dual; |
35 | |
36 | AA |
37 | ------------- |
38 | 20.4508218 |
39 | |
40 | --◎ 包含時間,所以有小數 |
41 | --◎ 可做日期欄位的計算 |
42 | |
43 | select trunc(sysdate - to_date('20070901','yyyymmdd')) aa from dual; |
44 | |
45 | AA |
46 | ---------- |
47 | 20 |
48 | --使用trunc取整數,得到日期 |
49 | |
50 | 5. 日期相減得到小時差 |
51 | ex. |
52 | select trunc((sysdate - to_date('20070901','yyyymmdd'))*24) aa from dual; |
53 | |
54 | AA |
55 | ---------- |
56 | 490 |
57 | |
58 | 6. 日期相減得到分鐘差 |
59 | ex. |
60 | select trunc((sysdate - to_date('20070901','yyyymmdd'))*24*60) aa from dual; |
61 | |
62 | AA |
63 | --------- |
64 | 29459 |
65 | |
66 | 7. 日期相減得到秒數差 |
67 | ex. |
68 | select trunc((sysdate - to_date('20070901','yyyymmdd'))*24*60*60) aa from dual; |
69 | |
70 | AA |
71 | ---------- |
72 | 1767606 |
73 | |
74 | 8. 日期 + n小時 |
75 | ex. |
76 | select to_char(sysdate,'YYYY/MM/DD HH24:MI:SS') aa from dual; |
77 | |
78 | AA |
79 | -------------------- |
80 | 2007/09/21 11:03:47 --系統時間 |
81 | |
82 | select to_char(sysdate+2/24,'YYYY/MM/DD HH24:MI:SS') aa from dual; |
83 | |
84 | AA |
85 | -------------------- |
86 | 2007/09/21 13:03:47 --加2小時(理論值) |
87 | |
88 | 9. 日期 + n分鐘 |
89 | ex. |
90 | select to_char(sysdate+10/1440,'YYYY/MM/DD HH24:MI:SS') aa from dual; |
91 | |
92 | AA |
93 | -------------------- |
94 | 2007/09/21 11:13:47 --加10分鐘(理論值) |
95 | |
96 | 10. 日期+ n秒鐘 |
97 | ex. |
98 | select to_char(sysdate+10/86400,'YYYY/MM/DD HH24:MI:SS') aa from dual; |
99 | |
100 | AA |
101 | -------------------- |
102 | 2007/09/21 11:13:57 --加10秒鐘(理論值) |
2010年4月27日 星期二
Oracle 取排行榜
WITH qa AS
(SELECT '國文' cid, 60 ca, TRUNC (SYSDATE) cb
FROM DUAL
UNION
SELECT '國文' cid, 100 ca, TRUNC (SYSDATE) + 1 cb
FROM DUAL
UNION
SELECT '國文' cid, 60 ca, TRUNC (SYSDATE) + 3 cb
FROM DUAL
UNION
SELECT '國文' cid, 100 ca, TRUNC (SYSDATE) + 3 cb
FROM DUAL
UNION
SELECT '數學' cid, 40 ca, TRUNC (SYSDATE) + 3 cb
FROM DUAL
UNION
SELECT '數學' cid, 70 ca, TRUNC (SYSDATE) + 2 cb
FROM DUAL
UNION
SELECT '數學' cid, 90 ca, TRUNC (SYSDATE) + 3 cb
FROM DUAL
UNION
SELECT '數學' cid, NULL ca, TRUNC (SYSDATE) + 3 cb
FROM DUAL),
qb AS
(SELECT DENSE_RANK () OVER (PARTITION BY cid ORDER BY ca DESC NULLS LAST) AS dense_rank_top,
RANK () OVER (PARTITION BY cid ORDER BY ca DESC NULLS LAST) AS rank_top,
MAX(CA) KEEP (DENSE_RANK LAST ORDER BY CA NULLS LAST) OVER (PARTITION BY CID) "Highest" ,
MIN(ca) KEEP (DENSE_RANK FIRST ORDER BY ca NULLS LAST) OVER (PARTITION BY cid) "Lowest",qa.*
FROM qa)
SELECT *
FROM qb
DENSE_RANK_TOP RANK_TOP Highest Lowest CID CA CB
1 1 100 60 國文 100 2010/4/29
1 1 100 60 國文 100 2010/5/1
2 3 100 60 國文 60 2010/4/28
2 3 100 60 國文 60 2010/5/1
1 1 40 數學 90 2010/5/1
2 2 40 數學 70 2010/4/30
3 3 40 數學 40 2010/5/1
4 4 40 數學 2010/5/1
(SELECT '國文' cid, 60 ca, TRUNC (SYSDATE) cb
FROM DUAL
UNION
SELECT '國文' cid, 100 ca, TRUNC (SYSDATE) + 1 cb
FROM DUAL
UNION
SELECT '國文' cid, 60 ca, TRUNC (SYSDATE) + 3 cb
FROM DUAL
UNION
SELECT '國文' cid, 100 ca, TRUNC (SYSDATE) + 3 cb
FROM DUAL
UNION
SELECT '數學' cid, 40 ca, TRUNC (SYSDATE) + 3 cb
FROM DUAL
UNION
SELECT '數學' cid, 70 ca, TRUNC (SYSDATE) + 2 cb
FROM DUAL
UNION
SELECT '數學' cid, 90 ca, TRUNC (SYSDATE) + 3 cb
FROM DUAL
UNION
SELECT '數學' cid, NULL ca, TRUNC (SYSDATE) + 3 cb
FROM DUAL),
qb AS
(SELECT DENSE_RANK () OVER (PARTITION BY cid ORDER BY ca DESC NULLS LAST) AS dense_rank_top,
RANK () OVER (PARTITION BY cid ORDER BY ca DESC NULLS LAST) AS rank_top,
MAX(CA) KEEP (DENSE_RANK LAST ORDER BY CA NULLS LAST) OVER (PARTITION BY CID) "Highest" ,
MIN(ca) KEEP (DENSE_RANK FIRST ORDER BY ca NULLS LAST) OVER (PARTITION BY cid) "Lowest",qa.*
FROM qa)
SELECT *
FROM qb
同行資料列欄位取最大值與最小值
2010年4月10日 星期六
2010年2月22日 星期一
中華郵政考試
http://www.tabf.org.tw/tw/ptc_Post/bothistory.asp
| ||||||
file:///D:/Jim/Downloads/Post_1.doc
| ||||||
|
Oracle 9 xmlagg() 函數將多筆資料合併在同一列上
WITH qa AS
(SELECT 'Row1' drow, 'user1' emp, 100 num FROM DUAL
UNION ALL
SELECT 'Row2' drow, 'user1' emp, 90 num FROM DUAL
UNION ALL
SELECT 'Row3' drow, 'user1' emp, 80 num FROM DUAL)
SELECT emp,
RTRIM (XMLAGG (XMLELEMENT ("User", num || ',') order by num ).EXTRACT ('//text()'),',') combine
FROM qa
GROUP BY emp;
訂閱:
文章 (Atom)