-------------------------------oracle基礎------------------------------------------
1.oracle中聲明變量時,變量類型是在變量名的后面。如:v_count number(7,1)
1.oracle中聲明變量時,變量類型是在變量名的后面。如:v_count number(7,1)
2.oracle中賦值用:=,等于用=.不同于java中等于用:“==”,賦值用"=".
v_msg varchar2(32) := 'testing'
3.字符常量用單引號,而不是雙引號。若要輸出帶字符可以如:'in='||v_count.
而不能被java中,用"in="+v_count.
4.在存儲過程或函數中,聲明變量名的規則是:
第一個字符必須是字母,不能是數字如:200_count;
變量不分大小寫;
不能含有"-","/","$"等符號,但可以用"_".
5.可以用"<>"或"!="來表示不等于。
單行注釋,用--,多行注釋,用/**/
單行注釋,用--,多行注釋,用/**/
6.條件語句if,case:
if,case以及以前的循環標簽,結果時,都須用end[關鍵字]來表示結果。
6.1
if 條件 then ...
else if 條件 then ...
else ...
end if
如:
if salse>5000 then bonus :=500;
else if salse>3000 then bonus :=300;(即當銷售額大于3000小于等于5000時)
else bonus :=100
end if
6.2
case格式用二種,一種是有選擇器,另一種則沒有。如下:
case grade
when 'A' then status :='good';
when 'B' then status :='normal'
else status :='bad'
end case
或
case
when grade='A' then status :='good';
when grade='B' then status :='normal'
else status :='bad'
end case
case格式用二種,一種是有選擇器,另一種則沒有。如下:
case grade
when 'A' then status :='good';
when 'B' then status :='normal'
else status :='bad'
end case
或
case
when grade='A' then status :='good';
when grade='B' then status :='normal'
else status :='bad'
end case
7.循環語句,while<條件> loop...end loop / for...loop ...end loop.
實例如下:
create or replace procedure a(max in number,value out number)
as
index number :=0;
begin
while index<=max
loop
value :=value*value;
end loop;
end
實例如下:
create or replace procedure a(max in number,value out number)
as
index number :=0;
begin
while index<=max
loop
value :=value*value;
end loop;
end
若用for,可以是:
for <循環計數變量> in [reverse] <上限> .. <下限>
for m in 1 .. 10
loop
.........
end loop
將執行從1到10的循環;
若用
for m in reverse 1 ..10
loop ...end loop
則實現從10到1的逆向循環。
for <循環計數變量> in [reverse] <上限> .. <下限>
for m in 1 .. 10
loop
.........
end loop
將執行從1到10的循環;
若用
for m in reverse 1 ..10
loop ...end loop
則實現從10到1的逆向循環。
oracle左/右/全連接
inner join --內連接和where相同;相當于join;
left join --左向外連接,返回左邊表所有符合條件的
right join --右向外連接,返回右邊表所有符合條件的
full join --完整外部連接,左向外連接和右向外連接的合集
left join --左向外連接,返回左邊表所有符合條件的
right join --右向外連接,返回右邊表所有符合條件的
full join --完整外部連接,左向外連接和右向外連接的合集
--建立測試數據
create table a(id number);
create table b(id number);
insert into a values(1);
insert into a values(2);
insert into a values(3);
insert into b values(1);
insert into b values(2);
insert into b values(4);
create table a(id number);
create table b(id number);
insert into a values(1);
insert into a values(2);
insert into a values(3);
insert into b values(1);
insert into b values(2);
insert into b values(4);
--左:
--主流數據庫通用的方法
select * from a left join b on a.id=b.id;
--Oracle特有的方法 --最好不要用這樣,不便于sql語句的移植。
select * from a, b where a.id=b.id(+);
ID ID
---------- ----------
1 1
2 2
3
--右:
--主流數據庫通用的方法
select * from a right join b on a.id=b.id;
--Oracle特有的方法
select * from a, b where a.id(+)=b.id;
ID ID
---------- ----------
1 1
2 2
4
--內
--主流數據庫通用的方法
select * from a join b on a.id=b.id;
--where關聯
select * from a, b where a.id=b.id;
ID ID
---------- ----------
1 1
2 2
--全外
--主流數據庫通用的方法
select * from a full join b on a.id=b.id;
--Oracle特有的方法
select *
from a, b
where a.id = b.id(+)
union
select *
from a, b
where a.id(+) = b.id;
ID ID
---------- ----------
1 1
2 2
3
4
--主流數據庫通用的方法
select * from a left join b on a.id=b.id;
--Oracle特有的方法 --最好不要用這樣,不便于sql語句的移植。
select * from a, b where a.id=b.id(+);
ID ID
---------- ----------
1 1
2 2
3
--右:
--主流數據庫通用的方法
select * from a right join b on a.id=b.id;
--Oracle特有的方法
select * from a, b where a.id(+)=b.id;
ID ID
---------- ----------
1 1
2 2
4
--內
--主流數據庫通用的方法
select * from a join b on a.id=b.id;
--where關聯
select * from a, b where a.id=b.id;
ID ID
---------- ----------
1 1
2 2
--全外
--主流數據庫通用的方法
select * from a full join b on a.id=b.id;
--Oracle特有的方法
select *
from a, b
where a.id = b.id(+)
union
select *
from a, b
where a.id(+) = b.id;
ID ID
---------- ----------
1 1
2 2
3
4
對于多表查詢,如下:
select * from a
left join b on a.id=b.id
left join c on c.id=b.id;
left join b on a.id=b.id
left join c on c.id=b.id;
ID ID ID
---------- ---------- ----------
1 1 1
2 2
3
---------- ---------- ----------
1 1 1
2 2
3
自己理解:
相當于先進行第一個left join,得到結果集A(3條記錄);結果集A再與第二個left join進行查詢;
select * from a
left join b on a.id=b.id
right join c on c.id=b.id;
left join b on a.id=b.id
right join c on c.id=b.id;
相當于先進行第一個left join,得到結果集A(3條記錄);結果集A再與right join進行查詢,即以c表為主,因為C表只有一個記錄,所以最終才顯示一條記錄;
-----------------------------------------------------------------------------------------
1.
NVL(ac.ovrided_ac_nam, en.stmt_nam) accountDisplayName,
NVL(EXPR1,EXPR2)
若EXPR1是NULL,則返回EXPR2,否則返回EXPR1.
SELECT NAME,NVL(TO_CHAR(COMM),'NOT APPLICATION') FROM TABLE1; --注意不能是雙引號。
2.
DUAL叫虛表,又叫啞表。這表示其中的內容并不是在數據庫實際存在的,而是隨表達式的不同而不是同的。
select * from dual,返回什么?
D
-
X
這表示其中沒有任何內容,也不要對DUAL這個虛表進行增刪改,這樣做沒有實際意義,更不能DROP。強調,它是一個系統表。
使用DUAL比較常見的情況是查詢當前的系統時間,如:
SQL> select to_char(sysdate,'yyyy.mm.dd') as x from dual;
當我們計算表達式時,可用
SELECT sqrt(81) FROM dual;
SELECT (5+6)*7 FROM dual;
3.
to_char,to_date
日期到字符操作
select to_char(sysdate,'yyyy.mm.dd') as x from dual;
字符到日期操作
select to_date('2003-10-17 21:15:37','yyyy-mm-dd hh24:mi:ss') from dual
to_char(1210.73, '9999.9') would return '1210.7'
to_char(1210.73, '9,999.99') would return '1,210.73'
to_char(1210.73, '$9,999.00') would return '$1,210.73'
to_char(21, '000099') would return '000021'
4.
select a,
CASE WHEN t.b = 'yes' THEN
t.c ELSE 0 END yescolumn,
CASE WHEN t.b = 'no' THEN
t.c ELSE 0 END nocolumn,
在select語句中,也可應用case.在select的字段中,會同時出現yes,no兩個字段。
5.
不等于:WHERE ROWID <> (SELECT MAX(ROWID)
6.
字段合并:
select ac_id || unit_cde from cc_ac t --make two column into one
相當于:
select concat(ac_id , unit_cde) from cc_ac t --make two column into one
NVL(ac.ovrided_ac_nam, en.stmt_nam) accountDisplayName,
NVL(EXPR1,EXPR2)
若EXPR1是NULL,則返回EXPR2,否則返回EXPR1.
SELECT NAME,NVL(TO_CHAR(COMM),'NOT APPLICATION') FROM TABLE1; --注意不能是雙引號。
2.
DUAL叫虛表,又叫啞表。這表示其中的內容并不是在數據庫實際存在的,而是隨表達式的不同而不是同的。
select * from dual,返回什么?
D
-
X
這表示其中沒有任何內容,也不要對DUAL這個虛表進行增刪改,這樣做沒有實際意義,更不能DROP。強調,它是一個系統表。
使用DUAL比較常見的情況是查詢當前的系統時間,如:
SQL> select to_char(sysdate,'yyyy.mm.dd') as x from dual;
當我們計算表達式時,可用
SELECT sqrt(81) FROM dual;
SELECT (5+6)*7 FROM dual;
3.
to_char,to_date
日期到字符操作
select to_char(sysdate,'yyyy.mm.dd') as x from dual;
字符到日期操作
select to_date('2003-10-17 21:15:37','yyyy-mm-dd hh24:mi:ss') from dual
to_char(1210.73, '9999.9') would return '1210.7'
to_char(1210.73, '9,999.99') would return '1,210.73'
to_char(1210.73, '$9,999.00') would return '$1,210.73'
to_char(21, '000099') would return '000021'
4.
select a,
CASE WHEN t.b = 'yes' THEN
t.c ELSE 0 END yescolumn,
CASE WHEN t.b = 'no' THEN
t.c ELSE 0 END nocolumn,
在select語句中,也可應用case.在select的字段中,會同時出現yes,no兩個字段。
5.
不等于:WHERE ROWID <> (SELECT MAX(ROWID)
6.
字段合并:
select ac_id || unit_cde from cc_ac t --make two column into one
相當于:
select concat(ac_id , unit_cde) from cc_ac t --make two column into one
----------------------------------sqlplus命令(系統命令)------------------------------
sql語句主要是對數據庫的定義與操作,而對像環境設置,數據庫會話等SQL語句是不能完成的。
Oracle公司提供的附加語句(或稱命令),可以滿足程序人員和管理員的一些特殊操作要求。比如,在顯示超過上百行記錄信息時,可以采用每屏“暫停”來實現。要達到這樣的目的,就要在SQL>下發 set pause on 命令。由于SQL*PLUS命令較多,下面僅給出最常用的幾個命令的說明:
1.
logon可以是:
{username[/password][@connect_identifier]|/} [AS {SYSOPER|SYSDBA}]
sql語句主要是對數據庫的定義與操作,而對像環境設置,數據庫會話等SQL語句是不能完成的。
Oracle公司提供的附加語句(或稱命令),可以滿足程序人員和管理員的一些特殊操作要求。比如,在顯示超過上百行記錄信息時,可以采用每屏“暫停”來實現。要達到這樣的目的,就要在SQL>下發 set pause on 命令。由于SQL*PLUS命令較多,下面僅給出最常用的幾個命令的說明:
1.
logon可以是:
{username[/password][@connect_identifier]|/} [AS {SYSOPER|SYSDBA}]
切換用戶:
connect user/password
退出:disconnect
connect user/password
退出:disconnect
2.
EXIT和QUIT
可以用 exit 或quit 來終止SQL*PLUS的操作(會話)。
3.
DESCRIBE(顯示表、視圖結構)
DESCRIBE可以用(只要用DESC即可)來顯示表、視圖的列的定義,也可以顯示同義詞、函數或存儲過程的說明。語法如下:DESC[RIBE] {[schema.]object[@connect_identifier]}
EXIT和QUIT
可以用 exit 或quit 來終止SQL*PLUS的操作(會話)。
3.
DESCRIBE(顯示表、視圖結構)
DESCRIBE可以用(只要用DESC即可)來顯示表、視圖的列的定義,也可以顯示同義詞、函數或存儲過程的說明。語法如下:DESC[RIBE] {[schema.]object[@connect_identifier]}
Schema:用戶名,如果省去,則為對象的所有者。
object
可以是 表(table), 視圖(view),類型( type), 存儲過程(procedure),函數( function), 包(package)或同義詞( synonym)
4.
LIST(列出)命令
可以用 LIST 命令來列出當前SQL緩沖區中的一行或多行命令語句。
L[IST] [n|n m|n *|n LAST|*|* n|* LAST|LAST]
n 列出第n行
n m 列出n到m行
n * 列出第n行到當前行
n LAST 列出第n行到最末行
* 列出所有行
* n 列出當前行到第n行
* LAST列出當前行到最末行
LAST 列出最末行
例:
SQL> LIST
1 SELECT ENAME, DEPTNO, JOB
2 FROM EMP
3 WHERE JOB = ’CLERK’
4* ORDER BY DEPTNO
5.
Save保存當前緩沖區命令到文件
可以用SAVE命令將當前的命令行保存到操作系統的文件中。
例:
SQL>select table_name from dict where table_name like ‘%ROLE%’;
SQL>save c:\get_role
6.
GET將命令文件讀到緩沖區
可以用GET 命令將操作系統的目錄下的命令文件讀到緩沖區(但不執行)。語法如下:
GET filename [.ext] [LIS[T]|NOL[IST]]
其中:
filename: 希望加載到SQL緩沖區的文件名
ext: 文件的擴展名,缺省為 SQL.
7.
再運行當前緩沖區的命令
在SQL>方式下,如果希望在運行當前的命令,可用Run(或R)或用 / 來實現,如:
1* select table_name from dict where table_name like '%ROLE%'
SQL> /
8.
設置顯示行字符數:set linesize 180(默認80個字符)
設置頁面顯示行數:set pagesize 66
9.
事務自動提交:
show auto,會顯示:autocommit on/off
set auto on/off.
設置暫停:
set pause on
---------------------------------------數據類型---------------------------------
Char 定長字符,≤255個字符
Varchar2 變長字符,≤2000個字符
Number(m,n) 數字類型,含整數、浮點、雙精度等
Date 固定長度(7字節)的日期型
Blob 大二進制對象,≤4GB
Clob 大字符串對象,≤4GB
object
可以是 表(table), 視圖(view),類型( type), 存儲過程(procedure),函數( function), 包(package)或同義詞( synonym)
4.
LIST(列出)命令
可以用 LIST 命令來列出當前SQL緩沖區中的一行或多行命令語句。
L[IST] [n|n m|n *|n LAST|*|* n|* LAST|LAST]
n 列出第n行
n m 列出n到m行
n * 列出第n行到當前行
n LAST 列出第n行到最末行
* 列出所有行
* n 列出當前行到第n行
* LAST列出當前行到最末行
LAST 列出最末行
例:
SQL> LIST
1 SELECT ENAME, DEPTNO, JOB
2 FROM EMP
3 WHERE JOB = ’CLERK’
4* ORDER BY DEPTNO
5.
Save保存當前緩沖區命令到文件
可以用SAVE命令將當前的命令行保存到操作系統的文件中。
例:
SQL>select table_name from dict where table_name like ‘%ROLE%’;
SQL>save c:\get_role
6.
GET將命令文件讀到緩沖區
可以用GET 命令將操作系統的目錄下的命令文件讀到緩沖區(但不執行)。語法如下:
GET filename [.ext] [LIS[T]|NOL[IST]]
其中:
filename: 希望加載到SQL緩沖區的文件名
ext: 文件的擴展名,缺省為 SQL.
7.
再運行當前緩沖區的命令
在SQL>方式下,如果希望在運行當前的命令,可用Run(或R)或用 / 來實現,如:
1* select table_name from dict where table_name like '%ROLE%'
SQL> /
8.
設置顯示行字符數:set linesize 180(默認80個字符)
設置頁面顯示行數:set pagesize 66
9.
事務自動提交:
show auto,會顯示:autocommit on/off
set auto on/off.
設置暫停:
set pause on
---------------------------------------數據類型---------------------------------
Char 定長字符,≤255個字符
Varchar2 變長字符,≤2000個字符
Number(m,n) 數字類型,含整數、浮點、雙精度等
Date 固定長度(7字節)的日期型
Blob 大二進制對象,≤4GB
Clob 大字符串對象,≤4GB
對于數字類型,也可以用:
Decimal
Double PREcision
Float
Integer
Int
Numeric
但,oracle在保存時,會將上面的類型自動轉換為number.
Decimal
Double PREcision
Float
Integer
Int
Numeric
但,oracle在保存時,會將上面的類型自動轉換為number.
------------------group by 與 分類統計-----------------
1.報表合計專用的Rollup函數
1.報表合計專用的Rollup函數
銷售報表
廣州 1月 2000元
廣州 2月 2500元
廣州 4500元
深圳 1月 1000元
深圳 2月 2000元
深圳 3000元
所有地區 7500元
廣州 1月 2000元
廣州 2月 2500元
廣州 4500元
深圳 1月 1000元
深圳 2月 2000元
深圳 3000元
所有地區 7500元
以往的查詢SQL:
Select area,month,sum(money) from SaleOrder group by area,month
然后廣州,深圳的合計和所有地區合計都需要在程序里自行累計
Select area,month,sum(money) from SaleOrder group by area,month
然后廣州,深圳的合計和所有地區合計都需要在程序里自行累計
1.其實可以使用如下SQL:
Select area,month,sum(total_sale) from SaleOrder group by rollup(area,month)
就能產生和報表一模一樣的紀錄
2.如果year不想累加,可以寫成
Select year,month,area,sum(total_sale) from SaleOrder group by year, rollup(month,area)
另外Oracle 9i還支持如下語法:
Select year,month,area,sum(total_sale) from SaleOrder group by rollup((year,month),area)
3.Grouping讓合計列更好讀
RollUp在顯示廣州合計時,月份列為NULL,但更好的做法應該是顯示為"所有月份"
Grouping就是用來判斷當前Column是否是一個合計列,1為yes,然后用Decode把它轉為"所有月份"
Select Decode(Grouping(area),1,'所有地區',area) area, Decode(Grouping(month),1,'所有月份',month), sum(money) From SaleOrder Group by RollUp(area,month);
Select year,month,area,sum(total_sale) from SaleOrder group by year, rollup(month,area)
另外Oracle 9i還支持如下語法:
Select year,month,area,sum(total_sale) from SaleOrder group by rollup((year,month),area)
3.Grouping讓合計列更好讀
RollUp在顯示廣州合計時,月份列為NULL,但更好的做法應該是顯示為"所有月份"
Grouping就是用來判斷當前Column是否是一個合計列,1為yes,然后用Decode把它轉為"所有月份"
Select Decode(Grouping(area),1,'所有地區',area) area, Decode(Grouping(month),1,'所有月份',month), sum(money) From SaleOrder Group by RollUp(area,month);
說明:
decode格式:
decode(字段或字段的運算,值1,值2,值3)
這個函數運行的結果是,當字段或字段的運算的值等于值1時,該函數返回值2,否則返回值3。
當然值1,值2,值3也可以是表達式,這個函數使得某些sql語句簡單了許多。
decode格式:
decode(字段或字段的運算,值1,值2,值3)
這個函數運行的結果是,當字段或字段的運算的值等于值1時,該函數返回值2,否則返回值3。
當然值1,值2,值3也可以是表達式,這個函數使得某些sql語句簡單了許多。
Decode(Grouping(area),1,'所有地區',area),判斷Grouping(area)是否為1,若是,則采用“所有地區”,否則采用area.
比如我要查詢某班男生和女生的數量分別是多少?
通常我們這么寫:
select count(*) from 表 where 性別 = 男;
select count(*) from 表 where 性別 = 女;
要想顯示到一起還要 union一下,太麻煩了
通常我們這么寫:
select count(*) from 表 where 性別 = 男;
select count(*) from 表 where 性別 = 女;
要想顯示到一起還要 union一下,太麻煩了
用decode呢,只需要一句話
select decode(性別,男,1,0),decode(性別,女,1,0) from 表
select decode(性別,男,1,0),decode(性別,女,1,0) from 表
--------------------------------多級層次查詢---------------------------------
Oracle中Start with...Connect By理解及用法
Oracle中Start with...Connect By理解及用法
其基本語法是:
select ... from tablename start with cond1
connect by cond2
where cond3;
select ... from tablename start with cond1
connect by cond2
where cond3;
簡單說來是將一個樹狀結構存儲在一張表里,比如一個表中存在兩個字段: id,parentid,那么通過表示每一條記錄的parent是誰,就可以形成一個樹狀結構。用上述語法的查詢可以取得這棵樹的所有記錄。
其中COND1是根結點的限定語句,當然可以放寬限定條件,以取得多個根結點,實際就是多棵樹。
COND2是連接條件,其中用PRIOR表示上一條記錄,比如 CONNECT BY PRIOR ID=PRAENTID就是說上一條記錄的ID是本條記錄的PRAENTID,即本記錄的父親是上一條記錄。
COND3是過濾條件,用于對返回的所有記錄進行過濾。
COND2是連接條件,其中用PRIOR表示上一條記錄,比如 CONNECT BY PRIOR ID=PRAENTID就是說上一條記錄的ID是本條記錄的PRAENTID,即本記錄的父親是上一條記錄。
COND3是過濾條件,用于對返回的所有記錄進行過濾。
例子:
創建示例表:
CREATE TABLE TBL_TEST
(
ID NUMBER,
NAME VARCHAR2(100 BYTE),
PID NUMBER DEFAULT 0
);
(
ID NUMBER,
NAME VARCHAR2(100 BYTE),
PID NUMBER DEFAULT 0
);
插入測試數據:
INSERT INTO TBL_TEST(ID,NAME,PID) VALUES('1','10','0');
INSERT INTO TBL_TEST(ID,NAME,PID) VALUES('2','11','1');
INSERT INTO TBL_TEST(ID,NAME,PID) VALUES('3','20','0');
INSERT INTO TBL_TEST(ID,NAME,PID) VALUES('4','12','1');
INSERT INTO TBL_TEST(ID,NAME,PID) VALUES('5','121','2');
INSERT INTO TBL_TEST(ID,NAME,PID) VALUES('1','10','0');
INSERT INTO TBL_TEST(ID,NAME,PID) VALUES('2','11','1');
INSERT INTO TBL_TEST(ID,NAME,PID) VALUES('3','20','0');
INSERT INTO TBL_TEST(ID,NAME,PID) VALUES('4','12','1');
INSERT INTO TBL_TEST(ID,NAME,PID) VALUES('5','121','2');
從Root往樹末梢遞歸(取所有點)
select * from TBL_TEST
start with id=1
connect by prior id = pid
select * from TBL_TEST
start with id=1
connect by prior id = pid
從末梢往樹ROOT遞歸(只取根結點,根結點的根結點......)
select * from TBL_TEST
start with id=5
connect by prior pid = id
------------------------------------------------
3.更多報表/分析決策功能
select * from TBL_TEST
start with id=5
connect by prior pid = id
------------------------------------------------
3.更多報表/分析決策功能
3.1 分析功能的基本結構
分析功能() over( partion子句,order by子句,窗口子句)
概念上很難講清楚,還是用例子說話比較好.
3.2 Row_Number 和 Rank, DENSE_Rank
用于選出Top 3 sales這樣的報表
當兩個業務員可能有相同業績時,就要使用Rank和Dense_Rank
比如
金額 RowNum Rank Dense_Rank
張三 4000元 1 1 1
李四 3000元 2 2 2
錢五 2000元 3 3 3
孫六 2000元 4 3 3
丁七 1000元 5 5 4
這時,應該把并列第三的錢五和孫六都選進去,所以用Ranking功能比RowNumber保險.至于Desnse還是Ranking就看具體情況了。
SELECT salesperson_id, SUM(tot_sales) sp_sales, RANK( ) OVER (ORDER BY SUM(tot_sales) DESC) sales_rank FROM orders GROUP BY salesperson_id
3.3 NTILE 把紀錄平分成甲乙丙丁四等
比如我想取得前25%的紀錄,或者把25%的紀錄當作同一個level平等對待,把另25%當作另一個Level平等對待
SELECT cust_nbr, SUM(tot_sales) cust_sales, NTILE(4) OVER (ORDER BY SUM(tot_sales) DESC) sales_quartile FROM orders GROUP BY cust_nbr ORDER BY 3,2 DESC;
NTITLE(4)把紀錄以 SUM(tot_sales)排序分成4份.
(1)
between,add_months用法
如:
intCalc.Calc_Date between TO_DATE( '20100330', 'DDMMYYYY') and ADD_MONTHS(TO_DATE('20100330','YYYYMMDD'),1) - 1
如:
intCalc.Calc_Date between TO_DATE( '20100330', 'DDMMYYYY') and ADD_MONTHS(TO_DATE('20100330','YYYYMMDD'),1) - 1
分析:
between .. and ..:
between .. and ..:
相當于大于A,小于B。 在其中不能加括號,如:between(.. and ..)是錯的。
add_months("時間",正負數):
正數,表示之前的幾個月,負數,表示之前幾個月。
add_months("時間",正負數) +/- A:表示之后之前的幾天。
ADD_MONTHS(TO_DATE('20100330','YYYYMMDD'),1) - 1:表示之后的一個月的前一天。
ADD_MONTHS(TO_DATE('20100330','YYYYMMDD'),1) - 1:表示之后的一個月的前一天。
(2)
可以點擊pl/sql的美化功能。F8運行功能。
(3)
TRUNC(i.expr_date, 'YYYY-MM'):
TRUNC(date[,fmt])
其中:
date 一個日期值
fmt 日期格式,該日期將由指定的元素格式所截去。忽略它則由最近的日期截去
TRUNC(date[,fmt])
其中:
date 一個日期值
fmt 日期格式,該日期將由指定的元素格式所截去。忽略它則由最近的日期截去
2.TRUNC(for number)
TRUNC函數返回處理后的數值,其工作機制與ROUND函數極為類似,只是該函數不對指定小數前或后的部分做相
TRUNC函數返回處理后的數值,其工作機制與ROUND函數極為類似,只是該函數不對指定小數前或后的部分做相
應舍入選擇處理
,而統統截去。
其具體的語法格式如下
TRUNC(number[,decimals])
其中:
number 待做截取處理的數值
decimals 指明需保留小數點后面的位數。可選項,忽略它則截去所有的小數部分
下面是該函數的使用情況:
TRUNC(89.985,2)=89.98
TRUNC(89.985)=89
TRUNC(89.985,-1)=80
注意:第二個參數可以為負數,表示為小數點左邊指定位數后面的部分截去,即均以0記。
其具體的語法格式如下
TRUNC(number[,decimals])
其中:
number 待做截取處理的數值
decimals 指明需保留小數點后面的位數。可選項,忽略它則截去所有的小數部分
下面是該函數的使用情況:
TRUNC(89.985,2)=89.98
TRUNC(89.985)=89
TRUNC(89.985,-1)=80
注意:第二個參數可以為負數,表示為小數點左邊指定位數后面的部分截去,即均以0記。
(3)
oracle獲取子字符串函數:
substr(‘123456789’,1,2) -從1到2
substr(‘123456789’2) -從2到完
substr(‘123456789’,1,2) -從1到2
substr(‘123456789’2) -從2到完
(4)
oracle:
在oracle中,若group aCurrency,bCurrency,cCurrency,則表示當:
aCurrency=HKD,bCurrency=HKD,cCurrency=HKD;
aCurrency=HKD,bCurrency=HKD,cCurrency=USD;
aCurrency=USD,bCurrency=HKD,cCurrency=HKD;
.....
每種排列組合時,進行分組.統計。
在oracle中,若group aCurrency,bCurrency,cCurrency,則表示當:
aCurrency=HKD,bCurrency=HKD,cCurrency=HKD;
aCurrency=HKD,bCurrency=HKD,cCurrency=USD;
aCurrency=USD,bCurrency=HKD,cCurrency=HKD;
.....
每種排列組合時,進行分組.統計。