首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

SQL Server 2012 數學函數完整指南:ABS、SQRT、RAND、ROUND、POWER、LOG、三角函數等實例詳解

     編輯:關於SqlServer

數學函數分類速查表

類別函數說明範例
基本運算ABS(x)絕對值ABS(-1)=1, ABS(0)=0
SIGN(x)符號函數SIGN(-5)=-1, SIGN(0)=0, SIGN(5)=1
根與冪SQRT(x)平方根 (x≥0)SQRT(4)=2
POWER(x,y)x 的 y 次方POWER(2,3)=8, POWER(2,-1)=0.5
SQUARE(x)平方SQUARE(3)=9
指數與對數EXP(x)e^xEXP(1)=2.718...
LOG(x) / LOG10(x)自然對數 / 常用對數LOG(EXP(1))=1, LOG10(100)=2
捨入ROUND(x, y)四捨五入保留 y 位小數 (y<0 表整數位)ROUND(32.12456,2)=32.12, ROUND(32.12456,-1)=30
CEILING/FLOOR向上/向下取整CEILING(3.2)=4, FLOOR(3.8)=3
隨機數RAND([seed])0~1 隨機浮點數,指定 seed 則可重現RAND(10) 固定序列
角度轉換RADIANS(x)角度→弧度RADIANS(180)=PI()
DEGREES(x)弧度→角度DEGREES(PI())=180
PI()圓周率 π3.14159265358979

三角函數與反三角函數

函數說明定義域/值域範例
SIN(x) / ASIN(x)正弦 / 反正弦x 弧度 / [-1,1] → [-π/2, π/2]SIN(PI()/2)=1, ASIN(1)=PI()/2
COS(x) / ACOS(x)餘弦 / 反餘弦x 弧度 / [-1,1] → [0, π]COS(0)=1, ACOS(-1)=PI()
TAN(x) / ATAN(x)正切 / 反正切x 弧度 / ℝ → (-π/2, π/2)TAN(PI()/4)=1, ATAN(1)=PI()/4
COT(x)餘切x 弧度COT(PI()/4)=1
ATN2(y, x)雙參數反正切 (象限正確)y, x → (-π, π]ATN2(1,1)=PI()/4

實務應用範例

1. 距離計算 (Haversine 公式,單位公里)

DECLARE @lat1 FLOAT = 25.0330, @lon1 FLOAT = 121.5654; -- 台北
DECLARE @lat2 FLOAT = 22.6273, @lon2 FLOAT = 120.3014; -- 高雄
DECLARE @R FLOAT = 6371;
SELECT @R * 2 * ASIN(SQRT(
    POWER(SIN(RADIANS(@lat2-@lat1)/2), 2) +
    COS(RADIANS(@lat1)) * COS(RADIANS(@lat2)) * POWER(SIN(RADIANS(@lon2-@lon1)/2), 2)
)) AS Distance_KM; -- 約 280 KM

2. 隨機抽樣 (可重現)

-- 固定種子,每次結果相同
SELECT TOP 10 * FROM Sales.OrderDetails ORDER BY RAND(12345);

3. 財務計算:複利終值

DECLARE @principal MONEY = 10000, @rate FLOAT = 0.05, @years INT = 10;
SELECT @principal * POWER(1 + @rate, @years) AS FutureValue; -- 16288.95

注意事項

  • 定義域錯誤:`SQRT`、`LOG`、`ASIN`/`ACOS` 輸入超出定義域會報錯,建議用 `CASE` 或 `NULLIF` 防護。
  • 精度與型別:輸入整數會隱含轉換為 `float`,財務計算建議用 `decimal(money)` 並配合 `ROUND` 控制精度。
  • RAND() 非加密安全:不可用於密碼學用途,需用 `CRYPT_GEN_RANDOM()` (2008+)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved