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

SQL Server 算術函數全方位解析:三角函數、對數、捨入與隨機數實務應用

     編輯:關於SqlServer

算術函數支援整數、浮點數、貨幣等數值型別運算,回傳 6 位小數精度。廣泛應用於財務計算、科學計算、統計分析、測試資料生成等場景。

核心算術函數分類表

類別函數功能範例
三角/反三角SIN, COS, TAN正弦/餘弦/正切 (弧度制)SIN(PI()/2) = 1
ASIN, ACOS, ATAN反正弦/反餘弦/反正切ATAN(1) = PI()/4
COT餘切COT(PI()/4) = 1
DEGREES, RADIANS弧度↔角度轉換DEGREES(PI()) = 180
PI()圓周率常數PI() = 3.14159265358979
對數/指數LOG, LOG10自然對數/常用對數LOG(EXP(1)) = 1
EXPe 的指數冪EXP(1) = 2.71828
POWER(x, y)x 的 y 次方POWER(2, 10) = 1024
SQRT平方根SQRT(2) = 1.41421
捨入/截斷ROUND(x, d[, f])四捨五入到 d 位 (f≠0 為截斷)ROUND(123.456, 2) = 123.46
CEILING大於等於 x 的最小整數CEILING(3.14) = 4
FLOOR小於等於 x 的最大整數FLOOR(3.14) = 3
SIGN正負號 (-1/0/1)SIGN(-5) = -1
ABS絕對值ABS(-5) = 5
隨機數RAND([seed])0-1 間偽隨機數,種子固定則序列固定RAND(123) 固定序列

算術函數表

算術函數表續

算術函數表續

經典範例解析

範例 4-37 多函數組合

範例 4-37 結果

-- 範例 4-37: 同一運算式組合 SIN, ATAN, RAND, PI, SIGN
SELECT SIN(PI()/4) AS SinVal, 
       ATAN(1) AS AtanVal, 
       RAND() AS RandVal, 
       PI() AS PiVal, 
       SIGN(-10) AS SignVal;

範例 4-38 CEILING/FLOOR

-- 範例 4-38: CEILING 與 FLOOR 對比
SELECT CEILING(3.14) AS CeilVal,  -- 4
       FLOOR(3.14) AS FloorVal,   -- 3
       CEILING(-3.14) AS CeilNeg, -- -3
       FLOOR(-3.14) AS FloorNeg;  -- -4

範例 4-39 ROUND

-- 範例 4-39: ROUND 四捨五入 vs 截斷
SELECT ROUND(123.4567, 2) AS Round2,      -- 123.46
       ROUND(123.4567, 2, 1) AS Trunc2,    -- 123.45 (第三參數非0為截斷)
       ROUND(123.4567, -1) AS RoundNeg1;   -- 120.00 (負數為十位捨入)

實務注意事項

  • 定義域錯誤回傳 NULL:SQRT(-1)、LOG(0)、ASIN(2) 回傳 NULL 並發出警告,建議用 CASE 預先檢查。
  • 貨幣型別精度:MONEY/SMALLMONEY 內部為整數儲存 (單位 0.0001),運算中隱含轉換可能導致精度遺失,關鍵財務計算建議用 DECIMAL(19,4)。
  • RAND 種子特性:同一查詢中多次呼叫 RAND() 回傳相同值;需不同值請用 RAND(CHECKSUM(NEWID())) 或 CRYPT_GEN_RANDOM (SQL 2008+)。
  • 浮點數比較:避免直接 FLOAT = FLOAT,使用 ABS(a-b) < 0.0001 容差比較。

算術函數是資料轉換與計算邏輯的基石,理解其精度特性、定義域限制、隨機數行為,能避免生產環境中的精度遺失與邏輯錯誤。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved