SQRT() 函數 (SQL SQRT() Function)

SQRT() 函數用於計算並返回一個數值的平方根(Square Root)。平方根是指一個數 x,使得 x * x 等於原始數值。

這個函數在所有主流資料庫系統中(MySQL、SQL Server、PostgreSQL、Oracle、SQLite)的語法和行為都是一致的。

SQRT() 語法 (Syntax)

SQRT(number)
  • number:要計算平方根的數值,必須是非負數。

SQRT() 函數用法範例 (Example)

基本範例

SELECT SQRT(100);  -- 結果:10
SELECT SQRT(2);    -- 結果:1.4142135623730951
SELECT SQRT(0);    -- 結果:0
SELECT SQRT(1);    -- 結果:1
SELECT SQRT(0.25); -- 結果:0.5

計算兩點之間的距離

在平面座標系中,計算兩點 (x1, y1)(x2, y2) 之間的歐幾里得距離:

SELECT
    point1_name,
    point2_name,
    SQRT(POWER(x2 - x1, 2) + POWER(y2 - y1, 2)) AS distance
FROM
    point_pairs;

假設有一個 storescustomers 資料表,計算客戶與各門市之間的距離:

SELECT
    c.customer_name,
    s.store_name,
    SQRT(POWER(c.coord_x - s.coord_x, 2) + POWER(c.coord_y - s.coord_y, 2)) AS distance
FROM
    customers c
CROSS JOIN
    stores s
ORDER BY
    c.customer_name,
    distance;

計算標準差(統計應用)

手動計算變異數的平方根(標準差):

SELECT
    SQRT(AVG(POWER(value - (SELECT AVG(value) FROM measurements), 2))) AS std_dev
FROM
    measurements;

注意:大多數資料庫都有內建的 STDDEV()STDEV() 函數可以直接使用。

判斷是否為完全平方數

SELECT
    number,
    SQRT(number) AS sqrt_value,
    CASE 
        WHEN SQRT(number) = FLOOR(SQRT(number)) THEN '是'
        ELSE '否'
    END AS is_perfect_square
FROM
    numbers;
numbersqrt_valueis_perfect_square
164
204.472...
255

負數的處理

SQRT() 函數不接受負數作為參數。嘗試對負數取平方根會產生錯誤或返回 NULL(取決於資料庫):

SELECT SQRT(-1);
-- MySQL: 返回 NULL
-- SQL Server: 產生錯誤「將傳遞給 sqrt 函數的值無效」
-- PostgreSQL: 產生錯誤「cannot take square root of a negative number」

如果可能遇到負數,建議使用 ABS() 函數先取絕對值,或使用 CASE 敘述句進行條件處理:

SELECT
    value,
    CASE 
        WHEN value >= 0 THEN SQRT(value)
        ELSE NULL
    END AS safe_sqrt
FROM
    data_table;

相關函數

  • POWER():計算 N 次方,POWER(x, 0.5) 等同於 SQRT(x)
  • ABS():計算絕對值。
-- 以下兩個表達式結果相同
SELECT SQRT(16);        -- 結果:4
SELECT POWER(16, 0.5);  -- 結果:4

注意事項

  • SQRT(NULL) 的結果是 NULL
  • 對於負數,不同資料庫的處理方式不同,應在應用層預先處理。
  • 浮點數運算可能存在精度誤差,例如 SQRT(2) * SQRT(2) 可能不完全等於 2