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;
假設有一個 stores 和 customers 資料表,計算客戶與各門市之間的距離:
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;
| number | sqrt_value | is_perfect_square |
|---|---|---|
| 16 | 4 | 是 |
| 20 | 4.472... | 否 |
| 25 | 5 | 是 |
負數的處理
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;
相關函數
-- 以下兩個表達式結果相同
SELECT SQRT(16); -- 結果:4
SELECT POWER(16, 0.5); -- 結果:4
注意事項
SQRT(NULL)的結果是NULL。- 對於負數,不同資料庫的處理方式不同,應在應用層預先處理。
- 浮點數運算可能存在精度誤差,例如
SQRT(2) * SQRT(2)可能不完全等於2。