﻿ SQL Server和Oracle的常用函數對比_電腦知識網

# SQL Server和Oracle的常用函數對比

2013-11-13 22:14:52  來源: Oracle

數學函數
絕對值
S:select abs() value
O:select abs() value from dual

取整(大)
S:select ceiling() value
O:select ceil() value from dual

取整（小）
S:select floor() value
O:select floor() value from dual

取整（截取）
S:select cast( as int) value
O:select trunc() value from dual

四捨五入
S:select round() value
O:select round() value from dual

e為底的冪
S:select Exp() value
O:select Exp() value from dual

取e為底的對數
S:select log() value
O:select ln() value from dual;

為底對數
S:select log() value
O:select log() value from dual;

取平方
S:select SQUARE() value
O:select power() value from dual

取平方根
S:select SQRT() value
O:select SQRT() value from dual

求任意數為底的冪
S:select power() value
O:select power() value from dual

取隨機數
S:select rand() value
O:select sysdbms_randomvalue() value from dual;

取符號
S:select sign() value
O:select sign() value from dual

數學函數
圓周率
S:SELECT PI() value
O:不知道

sincostan 參數都以弧度為單位
例如select sin(PI()/) value 得到（SQLServer）

AsinAcosAtanAtan 返回弧度

弧度角度互換(SQLServerOracle不知道)
DEGREES弧度〉角度

數值間比較
求集合最大值
S:select max(value) value from
(select value
union
select value
union
select value
union
select value)a

O:select greatest() value from dual

求集合最小值
S:select min(value) value from
(select value
union
select value
union
select value
union
select value)a

O:select least() value from dual

如何處理null值(F中的null以代替)
S:select FIsNull(F) value from Tbl
O:select Fnvl(F) value from Tbl

數值間比較
求字符序號
S:select ascii(a) value
O:select ascii(a) value from dual

從序號求字符
S:select char() value
O:select chr() value from dual

連接
S:select ++ value
O:select CONCAT()|| value from dual

子串位置 返回
S:select CHARINDEX(ssdsq) value
O:select INSTR(sdsqs) value from dual

模糊子串的位置 返回參數去掉中間%則返回
S:select patindex(%d%q%sdsfasdqe) value
O:oracle沒發現但是instr可以通過第四霾問刂瞥鱿執問?BR>　　select INSTR(sdsfasdqesd) value from dual 返回

求子串
S:select substring(abcd) value
O:select substr(abcd) value from dual

子串代替 返回aijklmnef
S:SELECT STUFF(abcdef ijklmn) value
O:SELECT Replace(abcdef bcd ijklmn) value from dual

子串全部替換
S:沒發現
O:select Translate(fasdbfasegasfa ) value from dual

長度
S:lendatalength
O:length

大小寫轉換 lowerupper

單詞首字母大寫
S:沒發現
O:select INITCAP(abcd dsaf df) value from dual

S:select space()+abcd value

S:select abcd+space() value

刪除空格
S:ltrimrtrim
O:ltrimrtrimtrim

重復字符串
S:select REPLICATE(abcd) value
O:沒發現

發音相似性比較(這兩個單詞返回值一樣發音相同)
S:SELECT SOUNDEX (Smith) SOUNDEX (Smythe)
O:SELECT SOUNDEX (Smith) SOUNDEX (Smythe) from dual
SQLServer中用SELECT DIFFERENCE(Smithers Smythers) 比較soundex的差
返回為同音最高

日期函數
系統時間
S:select getdate() value
O:select sysdate value from dual

前後幾日
直接與整數相加減

求日期
S:select convert(char()getdate()) value
O:select trunc(sysdate) value from dual
select to_char(sysdateyyyymmdd) value from dual

求時間
S:select convert(char()getdate()) value
O:select to_char(sysdatehh:mm:ss) value from dual

取日期時間的其他部分
S:DATEPART 和 DATENAME 函數 （第一個參數決定）
O:to_char函數 第二個參數決定

參數下表需要補充
year yy yyyy
quarter qq q (季度)
month mm m (m O無效)
dayofyear dy y (O表星期)
day dd d (d O無效)
week wk ww (wk O無效)
weekday dw (O不清楚)
Hour hhhhhh (hhhh S無效)
minute mi n (n O無效)
second ss s (s O無效)
millisecond ms (O無效)

當月最後一天
S:不知道
O:select LAST_DAY(sysdate) value from dual

本星期的某一天（比如星期日）
S:不知道
O:SELECT Next_day(sysdate) vaule FROM DUAL;

字符串轉時間
S:可以直接轉或者select cast(as datetime) value
O:SELECT To_date( ::yyyymmdd hhmiss) vaule FROM DUAL;

求兩日期某一部分的差（比如秒）
S:select datediff(ssgetdate()getdate()+) value
O:直接用兩個日期相減（比如dd=
SELECT (dd)*** vaule FROM DUAL;

根據差值求新的日期（比如分鐘）
O:SELECT sysdate+// vaule FROM DUAL;

求不同時區時間
S:不知道
O:SELECT New_time(sysdateydtgmt ) vaule FROM DUAL;

時區參數北京在東區應該是Ydt