2013年8月31日 星期六

數值函數

#
功能
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
僅以列出SINCOSTAN函數
14
大小比較
N/A
GREATEST
LEAST
可用於多個數值比較使用。
LEAST(d1., d2, .. dn)取得最小數值
ex:LEAST(3, 1, 2)=1GREATEST為取得最大

1. 商數Quotient/ 餘數Remainder
MSSQLORACLE功能整理如下。
功能
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. 捨位運算ROUNDTRUNC
MSSQLORACLE功能整理如下。
功能
ORACLE
MSSQL
說明
四捨五入
ROUND (value [,precision])
ROUND (value, precision)
將精準度以下的數值以四捨五入進位或捨棄。
捨位
TRUNC (value [,precision])
ROUND (value, precision, 1)
將精準度以下的數值直接捨棄。

ü  ORACLE
ORACLE分別提供TRUNCROUND函數可針對數字、日期型態資料進行截斷,語法如下:
功能
語法
說明
四捨五入
ROUND (value [,precision])
將精準度以下的數值以四捨五入進位或捨棄
捨位
TRUNC (value [,precision])
將精準度以下的數值直接捨棄
第二個引數precision精準度為選擇參數,可指定運算基準位置(捨位長度),預設值為0,代表小數點以下將進行四捨五入或捨位。

ü  MSSQL
針對四捨五入(Round)或捨位(Truncate)兩種運算提供ROUND函數,語法如下:
ROUND(value, precision [,function])
value:數值
precision:精準度,對MSSQL為必要參數。
function:運算類型(選擇性參數),預設值為0,代表四捨五入功能,值1代表捨位運算。與ORACLETRUNC函數具有相同功能

精準度(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. /下界(CEILINGFLOOR
MSSQL提供CEILING函數用以產生大於或等於某個特定值的最小整數值,ORACLE提供相同功能的CEIL函數。
兩種資料庫提供與CEILING相反功能的指令FLOOR,將產生小於或等於某個特定值的最大整數值。語法整理如下:
功能
SQL SERVER
ORACLE
上界值
CEILING(value)
CEIL(value)
下界值
FLOOR(value)
FLOOR(value)


4. 絕對值(ABS)、正負值判斷(SIGN
絕對值(ABS)取出數值的絕對值,正負值(SIGN)傳回數值的正負值,傳回值1代表正值、-1代表負值,0代表此值為0ABS傳回數值的量值而忽略其正負號,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)
即執行evaluee=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提供對數函數LOGMSSQL的自然對數(Natural Log)函數同名,自然對數兩種資料庫函數命名不同,ORACLELNMSSQLLOG
以下將以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)、三角函數(SinCosTan
首先,強調資料庫所提供三角函數相關函數並非以角度(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

ORACLE無提供圓周率(π)的函數,在此將應用cos180°-1,取ACOS(-1)即可得到180°,即代表πACOS為反餘弦函數(Arccosine)數學上是以COS-1代表。