ABS() 函數 (SQL ABS() Function)
ABS() 函數用於計算並返回一個數值的絕對值。絕對值是指一個數字距離零的距離,無論正負,結果永遠是非負數。
這個函數在所有主流資料庫系統中(MySQL、SQL Server、PostgreSQL、Oracle、SQLite)的語法和行為都是一致的。
ABS() 語法 (Syntax)
ABS(number)
- number:要計算絕對值的數值,可以是整數、小數、或數值欄位。
ABS() 函數用法範例 (Example)
基本範例
SELECT ABS(-20); -- 結果:20
SELECT ABS(20); -- 結果:20
SELECT ABS(-3.14); -- 結果:3.14
SELECT ABS(0); -- 結果:0
計算兩數之間的差異(不論大小順序)
假設有一個 stock_changes 資料表,記錄庫存變動:
| id | product | before_qty | after_qty |
|---|---|---|---|
| 1 | Laptop | 100 | 85 |
| 2 | Mouse | 50 | 75 |
| 3 | Keyboard | 30 | 30 |
我們想計算每筆記錄的變動量(不論是增加還是減少):
SELECT
product,
before_qty,
after_qty,
ABS(after_qty - before_qty) AS change_amount
FROM
stock_changes;
查詢結果:
| product | before_qty | after_qty | change_amount |
|---|---|---|---|
| Laptop | 100 | 85 | 15 |
| Mouse | 50 | 75 | 25 |
| Keyboard | 30 | 30 | 0 |
計算目標達成率的差距
SELECT
salesperson,
actual_sales,
target_sales,
ABS(actual_sales - target_sales) AS gap,
CASE
WHEN actual_sales >= target_sales THEN '達標'
ELSE '未達標'
END AS status
FROM
sales_report;
搭配 WHERE 子句篩選數據
找出價格變動超過 100 元的產品:
SELECT *
FROM price_history
WHERE ABS(new_price - old_price) > 100;
實務應用場景
- 計算距離或差異:例如兩點之間的座標差、溫度變化幅度等。
- 排序時忽略正負號:根據數值大小排序,不考慮正負。
- 篩選偏差值:找出超過某個閾值的變動記錄。
- 財務計算:計算盈虧金額的絕對值進行彙總。
注意事項
ABS(NULL)的結果是NULL。- 對於非常大的數值,結果仍可能溢出資料型別的範圍。