#
|
功能
|
SQL SERVER
|
ORACLE
|
說明
|
1
|
商數
|
/
|
TRUNC(/)
|
無函數。
|
2
|
四捨五入
|
ROUND
|
ROUND
|
四捨五入
|
3
|
捨位(截斷)
|
ROUND
|
TRUNC
|
捨位
|
4
|
取上界值
|
CEILING
|
CEIL
| |
5
|
取下界值
|
FLOOR
|
FLOOR
| |
6
|
絕對值
|
ABS
|
ABS
|
取得絕對值
|
7
|
正負值判斷
|
SIGN
|
SIGN
| |
8
|
次方
|
POWER
|
POWER
| |
9
|
平方根
|
SQRT
|
SQRT
| |
10
|
自然對數
|
LN
|
LOG
| |
11
|
對數
|
LOG10
|
LOG
|
SQL SERVER僅支援10為底的對數
|
12
|
圓周率
|
PI
|
N/A
|
ORACLE無提供PI函數,可採用ACOS(-1)替代
|
13
|
三角函數
|
SIN
COS
TAN
|
SIN
COS
TAN
|
僅以列出SIN、COS及TAN函數
|
14
|
大小比較
|
N/A
|
GREATEST
LEAST
|
可用於多個數值比較使用。
LEAST(d1., d2, .. dn)取得最小數值
ex:LEAST(3, 1, 2)=1。GREATEST為取得最大
|
1. 商數(Quotient)/ 餘數(Remainder)
MSSQL及ORACLE功能整理如下。
功能
|
ORACLE
|
MSSQL
|
說明
|
餘數
|
MOD (value, divisor)
|
value / divisor
|
|
商數
|
TRUNC (value / divisor)
|
value % divisor
|
ü ORACLE
餘數:MOD函數,用以取得某一數值除以除數(Divisor)的餘數。
MOD(value, divisor)
|
商數:並無提供相關函數,可將相除後結果以TRUNC函數捨位運算即為商數。
TRUNC(value / divisor)
|
ü MSSQL
餘數:可採用「%」(模數)運算子取得餘數。
商數:利用MSSQL數值運算上特性(整數除以整數結果為整數),即可取得商數。
範例/執行結果
MSSQL
|
ORACLE
|
結果
|
SELECT 7 / 3 Quotient
, 7 % 3 Remainder
|
SELECT TRUNC(7 / 3) Quotient
, MOD(7, 3) Remainder
FROM DUAL
|
2..1
|
2. 捨位運算(ROUND、TRUNC)
MSSQL及ORACLE功能整理如下。
功能
|
ORACLE
|
MSSQL
|
說明
|
四捨五入
|
ROUND (value [,precision])
|
ROUND (value, precision)
|
將精準度以下的數值以四捨五入進位或捨棄。
|
捨位
|
TRUNC (value [,precision])
|
ROUND (value, precision, 1)
|
將精準度以下的數值直接捨棄。
|
ü ORACLE
ORACLE分別提供TRUNC及ROUND函數可針對數字、日期型態資料進行截斷,語法如下:
功能
|
語法
|
說明
|
四捨五入
|
ROUND (value [,precision])
|
將精準度以下的數值以四捨五入進位或捨棄
|
捨位
|
TRUNC (value [,precision])
|
將精準度以下的數值直接捨棄
|
第二個引數precision(精準度)為選擇參數,可指定運算基準位置(捨位長度),預設值為0,代表小數點以下將進行四捨五入或捨位。
ü MSSQL
針對四捨五入(Round)或捨位(Truncate)兩種運算提供ROUND函數,語法如下:
ROUND(value, precision [,function])
|
value:數值
precision:精準度,對MSSQL為必要參數。
function:運算類型(選擇性參數),預設值為0,代表四捨五入功能,值1代表捨位運算。與ORACLE的TRUNC函數具有相同功能
精準度(precision)是以數值的個位數為基準,當精準度為0時,代表以整數部分進行進位或捨位,即以次1位(在此為第1位小數)位進行判斷;當大於0時,則代表小數點以下第幾位;若為負值,則代表整數部位。將以四捨五入命令進行說明。捨位的精準度基準定義相同。
四捨五入運算範例/執行結果
指令
|
結果
|
說明
|
ROUND(183.654, 0)
|
184.000
|
以個位數為依據,次一位值為6將進位
|
ROUND(183.654, 1)
|
183.700
|
以小數位第1位為為依據,次一位值為5將進位
|
ROUND(183.654, -1)
|
180.000
|
以整位第2位為依據,次一位值為3將捨位
|
3. 上/下界(CEILING、FLOOR)
MSSQL提供CEILING函數用以產生大於或等於某個特定值的最小整數值,ORACLE提供相同功能的CEIL函數。
兩種資料庫提供與CEILING相反功能的指令FLOOR,將產生小於或等於某個特定值的最大整數值。語法整理如下:
兩種資料庫提供與CEILING相反功能的指令FLOOR,將產生小於或等於某個特定值的最大整數值。語法整理如下:
功能
|
SQL SERVER
|
ORACLE
|
上界值
|
CEILING(value)
|
CEIL(value)
|
下界值
|
FLOOR(value)
|
FLOOR(value)
|
4. 絕對值(ABS)、正負值判斷(SIGN)
絕對值(ABS)取出數值的絕對值,正負值(SIGN)傳回數值的正負值,傳回值1代表正值、-1代表負值,0代表此值為0。ABS傳回數值的量值而忽略其正負號,SIGN傳回其正負號而忽略其量值。語法整理如下:
功能
|
SQL SERVER
|
ORACLE
|
絕對值
|
ABS(value)
|
ABS (value)
|
正負值
|
SIGN(value)
|
SIGN (value)
|
5. 次方、平方根、自然對數、對數、EXP(e)
以下列出次方、平方、平方根、e、自然對數(LN)及對數(LOG)等函數兩種資料相關函數語法。
功能
|
SQL SERVER
|
ORACLE
|
說明
|
次方
|
POWER(value, exponent)
|
POWER(value, exponent)
|
|
平方
|
SQUARE(value)
|
N/A
|
可使POWER函數代替
|
平方根
|
SQRT(value)
|
SQRT(value)
|
|
e
|
EXP(value)
|
EXP(value)
|
即執行evalue,e=2.7182818
|
自然對數
|
LOG(value)
|
LN (value)
|
SQL SERVER是以LOG表示LN
|
對數
|
LOG10(value)
|
LOG(base, value)
|
SQL SERVER僅提供以10為底的對數,但使用LOG運算方式解決
|
對於ORACLE而言,並無平方根SQRT函數,但可使用POWER函數替代,平方根(開根號)即代表其指數為0.5。請注意上表中ORACLE提供對數函數LOG與MSSQL的自然對數(Natural Log)函數同名,自然對數兩種資料庫函數命名不同,ORACLE為LN而MSSQL為LOG。
以下將以10的平方值100進行以下測試。兩種資料庫執行結果表列如下:
以下將以10的平方值100進行以下測試。兩種資料庫執行結果表列如下:
功能
|
SQL SERVER
|
ORACLE
|
結果
|
說明
|
次方 (102)
|
POWER(10, 2)
|
POWER(10, 2)
|
100
|
|
平方 (102)
|
SQUARE(10)
|
POWER(10, 2)
|
100
|
可用POWER函數
|
平方根 (100.5)
|
SQRT(100)
POWER(100, 0.5)
|
SQRT(100)
POWER(100, 0.5)
|
10
|
開根號可用POWER函數
|
e
|
EXP(1)
|
EXP(1)
|
2.7182818
|
|
自然對數
|
LOG(EXP(1))
|
LN (EXP(1))
|
1
|
|
對數 (Log10102)
|
LOG10(100)
|
LOG(10, 100)
|
2
|
SQL SERVER僅提供以10為底的對數
|
前述MSSQL只提供10為底的對數函數,若為其他基底則時,可以利用國中數學對數運算進行轉換計算,如 Log23=Log103 / Log102。
6. 圓周率(PI)、三角函數(Sin、Cos、Tan)
首先,強調資料庫所提供三角函數相關函數並非以角度(0~360°)為運算依據,運算前需將角度轉換成弧度1 rad = 180/π°(約57.29578°),1°=π/180 rad。度數乘以π/180便轉換成弧度;以弧度乘以180/π便轉換成度數。
功能
|
SQL SERVER
|
ORACLE
|
結果
|
說明
|
π(PI)
|
PI()
|
ACOS(-1)
(無提供函數)
|
π
|
ORACLE無提供函數,以COS-1(-1)代替
|
角度轉弧度
|
RADIANS(30.0)
|
ACOS(-1) /180 * 30
|
0.52356
|
|
弧度轉角度
|
DEGREES(0.52356)
|
0.52356 /ACOS(-1) * 180
|
30
|
|
SIN
|
SIN(PI() /180 * 30)
SIN(RADIANS(30.0))
|
SIN(ACOS(-1) /180 * 30)
|
0.5
|
SQL SERVER運算順序會影響結果
|
COS
|
COS(PI() /180 *60)
COS(RADIANS(60.0))
|
COS(ACOS(-1) /180 *60)
|
0.5
|
|
TAN
|
TAN(PI() / 180 * 45)
|
TAN(ACOS(-1) / 180 * 45)
|
1
|