首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL數學函數全解析:絕對值/圓周率/平方根/取整/隨機數/四捨五入/冪運算/符號判斷 核心函數與精度陷阱實戰

     編輯:MySQL 資料庫相關知識

函數分類速查表

分類函數語法示例結果說明
基礎常數ABSABS(x)ABS(-0.5)0.5絕對值
PIPI()PI()3.141593圓周率,雙精度
根/模SQRTSQRT(x)SQRT(3)1.73205...平方根,x≥0否則NULL
MODMOD(x,y)MOD(13,4)1取模,同 x%y
取整CEIL / CEILINGCEIL(x)CEIL(2.3), CEIL(-2.3)3, -2≥x的最小整數(向上取整)
FLOORFLOOR(x)FLOOR(2.3), FLOOR(-2.3)2, -3≤x的最大整數(向下取整)
ROUNDROUND(x [,d])ROUND(2.5), ROUND(2.53,1)3, 2.5四捨五入,d為小數位(默認0)
TRUNCATETRUNCATE(x,d)TRUNCATE(2.55,1)2.5截斷不四捨五入,d必填
隨機數RANDRAND([seed])RAND(), RAND(2)0.8269..., 0.6555...0-1隨機數;seed固定則序列固定
符號SIGNSIGN(x)SIGN(-2), SIGN(0), SIGN(2)-1, 0, 1負/零/正
冪運算POW / POWERPOW(x,y)POW(3,2)9x的y次方
指數/對數EXP / LN / LOGEXP(1), LN(2), LOG(10,100)2.718..., 0.693..., 2e^x, 自然對數, 以10為底對數
三角函數SIN/COS/TAN...SIN(PI()/2)1弧度制,角度需 * PI()/180

關鍵精度與行為陷阱

ROUND 銀行家算法(MySQL 8.0+)

ROUND(2.5)  → 2  (偶數進位)
ROUND(3.5)  → 4
ROUND(2.55, 1) → 2.6  (但浮點表示誤差可能導致意外)

建議:金融計算**禁用ROUND**,用DECIMAL精確類型 + 應用層BigDecimal控制。

RAND() 非加密安全

  • 預測性:RAND(seed) 固定種子產生確定序列,用於測試/分頁復現
  • 安全性:不可用於Token、Session ID、加密鹽,改用UUID()、RANDOM_BYTES() (8.0+)

FLOOR/CEIL 負數行為

FLOOR(-2.3) = -3  (向負無窮)
CEIL(-2.3)  = -2  (向正無窮)
-- 非截斷整數部分(-2)!

實戰組合技巧

隨機抽樣(大表高效)

-- 伯努利抽樣 ~10%
SELECT * FROM large_table WHERE RAND() < 0.1;

-- 系統抽樣(配合主鍵)
SELECT * FROM large_table WHERE id % 100 < 10;  -- 精確10%

分頁隨機種子固定

-- 用戶ID作種子,同用戶分頁順序固定
SELECT * FROM articles ORDER BY RAND(user_id) LIMIT 20 OFFSET 0;

幂運算計算複利

SELECT POW(1 + rate/100, years) AS multiplier FROM financial_products;

數學函數是報表計算、科學分析、隨機化業務、金融建模的基礎組件,精通精度特性、邊界行為、組合模式,避免「看起來對實際錯」的生產事故。

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