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 資料表,記錄庫存變動:

idproductbefore_qtyafter_qty
1Laptop10085
2Mouse5075
3Keyboard3030

我們想計算每筆記錄的變動量(不論是增加還是減少):

SELECT
    product,
    before_qty,
    after_qty,
    ABS(after_qty - before_qty) AS change_amount
FROM
    stock_changes;

查詢結果:

productbefore_qtyafter_qtychange_amount
Laptop1008515
Mouse507525
Keyboard30300

計算目標達成率的差距

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
  • 對於非常大的數值,結果仍可能溢出資料型別的範圍。