數學函數分類速查表
| 類別 | 函數 | 說明 | 範例 |
| 基本運算 | 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^x | EXP(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+)。