一、row_number() over()
資料甲
1 select column_name
1,column_name,data_type,
2 row_number() over (partition by column_name
1order by column_name) row_num
3 * from test_col where rownum < 20
partition by
相當與group by
,如果有了
partition by
則oralce
會先分組
,且row_number是以每
一組為單
位,且在一組內
進行標識順序的
可以使用
partition by 字句,
這樣row_number就分類
做出排名
如果不指定
partition
就相當於在
order by
的字句上
進行排序了
資料乙"row_number() over (partition by col1 order by col2)
表示根據col1分組,在分組內部根據 col2排序
而這個值就表示每組內部排序後的順序編號(組內連續的唯一的)
rank()
類似,不過rank 排序的時候跟派名次一樣,
可以並列2個第一名之後 是第3名lag 表示 分組排序後 ,
組內後面一條記錄減前面一條記錄的差,
第一條可返回 null btw: expert one on one
上講的最詳細,還有很多相關特性,
文件看起來比較費勁row_number()和rownum差不多
,功能更強一點(可以在各個分組內從1開時排序)rank()是跳躍排序
,有兩個第二名時接下來就是第四名(同樣是在各個分組內) dense_rank()l是連續排序,
有兩個第二名時仍然跟著第三名。
相比之下row_number是沒有重複值的 lag(arg1,arg2,arg3):
arg1
是從其他行返回的表示式
rg2是希望檢索的當前行分割槽的偏移量。
是乙個正的偏移量,時乙個往回檢索以前的行的數目。
arg3
是在arg2表示的數目超出了分組的範圍時返回的值。 "
二、nvl()
nvl (expr1, expr2)
如果expr1為null,返回expr2
nvl2 (expr1, expr2, expr3)
如果expr1為非空,則返回expr2,如果expr1為null,則返回expr3
nullif (expr1, expr2)
如果expr1=expr2,返回null,否則返回expr1
三、case when then
語法:
case expr when comparison_expr1 then return_expr1
[when comparison_expr2 then return_expr2
when comparison_exprn then return_exprn
else else_expr]
end在簡單的case表示式中,oracle會搜尋expr 等於comparison_expr的第一對when then,然後返回return_expr.如果沒有滿足條件的when then 並且存在else子句,那麼oracle會返回else_expr,否則會返回空值。
您不能為所有這些return_expr和else_expr指定文字的null。
四、decode()
decode有什麼
用途呢?
先構造乙個例子,假設我
們想給智星
職員加工資,其
標準是:工資在
8000
元以下的將加20%;工資在
8000
元以上的加15%,通常的做法是,先選出
記錄中的工資字段
值? select salary into var-salary from employee
,然後對變
量var-salary
用if-then-else或choose case之類的流
控制語句進
行判斷。
如果用decode函式,那麼我
們就可以把
這些流控制
語句省略,通
過sql
語句就可以直接完成。如下:
select decode(sign(salary - 8000),1,salary*1.15,-1,salary*1.2,salary from employee
是不是很簡潔?
decode的語
法:decode(value,if1,then1,if2,then2,if3,then3,...,else)
,表示如果value等於if1時,
decode
函式的結
果返回then1,...,
如果不等於任何乙個if值,
則返回else
。初看一下,decode 只能做等於
測試,但
剛才也看到了,我們通
過一些函式或
計算替代
value
,是可以使decode函式具
備大於、小於或等於功能。
decode()函式使用技巧
·含** 釋:
decode(條件,值1,
翻譯值1,值
2,翻譯值2,...值n,
翻譯值n,預設值)
該函式的含義如下
: if 條件=
值1 then
return(翻
譯值1)
elsif 條件=
值2 then
return(翻
譯值2)
......
elsif 條件=
值n then
return(翻
譯值n)
else
return(預設值)
end if
· 使用方法:
1、比較大小
select decode(sign(變數
1-變數2),-1,變數
1,變數2) from dual; --取較
小值sign()函式根據某個值是
0、正數還是
負數,分別返回
0、1、-1
例如: 變
量1=10,變
量2=20 則
sign(變數
1-變數2)
返回-1,decode解碼結果
為「變數
1」,達到了取較小
值的目的。
五、||
oracle
用|| 符號作為連線符, oracle查詢如下所示:
select 『name』 || 『last name』 from tablename
查詢結果中name和last name連線在一起了
六、concat()
拼接concat('good', 'string') goodstring
七、length()
求長度length('string') 6
八、to_char()
to_char
將數字或日期轉換為字串
to_char(date, 'fmt')
格式串包含在''中
, 大小寫敏感
, 可以是任意有效的日期 格式
格式串:
yyyy
表示完整的四位數字年
year
表示英文拼寫的年
mm 表示兩位數字月
month
表示英文全拼的年
dy 表示三位
縮寫的星期
day
表示英文全拼的星期
一些特殊用法: 時間
格式 hh24:mi:ss am 15:45:32 pm
在格式串中加入字串
dd " of " month 12 of october 用後
綴拼出整個日期
ddspth fourteenth
to_char(number, 'fmt')
使用此函式將數字
轉換成數字 9
表示數字 0
強制為0
$ 設定美元符號 l
使用當前字符集的
貨幣符號 .
小數點
, 千位分隔符
Oracle常用函式
數學函式 1.絕對值 o select abs 1 value from dual 2.取整 大 o select ceil 1.001 value from dual 3.取整 小 o select floor 1.001 value from dual 4.取整 擷取 o select trun...
oracle常用函式
1.concat c1,c2均為字串,函式將c2連線到c1的後面,如果c1為null,將返回c2.如果c2為null,則返回c1,如果c1 c2都為null,則返回null。他和操作符 返回的結果相同 select concat slobo svoboda username from dualuse...
Oracle 常用函式
select power 3,2 平方 from dual select round 1000.24432,3 取精度 from dual select floor 1000.54432 取下限不計較四捨五入 from dual select ceil 1000.04432 取上限不計較四捨五入 f...