POWER() / POW() 函數 (SQL POWER() / POW() Function)
POWER() 函數(某些資料庫也稱為 POW())用於計算一個數值的 N 次方(指數運算)。
各資料庫支援
| 資料庫 | POWER() | POW() |
|---|---|---|
| MySQL | ✓ | ✓ |
| PostgreSQL | ✓ | ✓ |
| Oracle | ✓ | ✗ |
| SQL Server | ✓ | ✗ |
| SQLite | ✓ | ✓ |
POWER() 語法 (Syntax)
POWER(base, exponent)
-- 或
POW(base, exponent)
- base:底數,即要進行乘方運算的數值。
- exponent:指數,即乘方的次數。
POWER() 函數用法範例 (Example)
基本範例
SELECT POWER(10, 2); -- 結果:100(10 的 2 次方 = 10 * 10)
SELECT POWER(2, 10); -- 結果:1024(2 的 10 次方)
SELECT POWER(5, 3); -- 結果:125(5 * 5 * 5)
SELECT POWER(9, 0.5); -- 結果:3(9 的 0.5 次方 = √9)
SELECT POWER(8, 1/3.0);-- 結果:2(8 的立方根)
SELECT POWER(10, 0); -- 結果:1(任何數的 0 次方都是 1)
SELECT POWER(10, -2); -- 結果:0.01(10 的 -2 次方 = 1/100)
計算複利
計算本金 10000 元,年利率 5%,存款 3 年後的本利和:
SELECT
10000 * POWER(1 + 0.05, 3) AS final_amount;
-- 結果:11576.25
更完整的範例,假設有一個 investments 資料表:
SELECT
account_id,
principal,
annual_rate,
years,
ROUND(principal * POWER(1 + annual_rate, years), 2) AS final_amount
FROM
investments;
| account_id | principal | annual_rate | years | final_amount |
|---|---|---|---|---|
| 1 | 10000 | 0.05 | 3 | 11576.25 |
| 2 | 50000 | 0.03 | 5 | 57963.70 |
計算歐幾里得距離
結合 SQRT() 函數計算兩點之間的距離:
SELECT
SQRT(POWER(x2 - x1, 2) + POWER(y2 - y1, 2)) AS distance
FROM
point_pairs;
計算位元操作(2 的次方)
判斷某個數是否是 2 的次方:
SELECT
number,
CASE
WHEN number > 0 AND (number & (number - 1)) = 0 THEN '是'
ELSE '否'
END AS is_power_of_2
FROM
numbers;
或計算特定位元位置的值:
SELECT
bit_position,
POWER(2, bit_position) AS bit_value
FROM
bit_positions;
| bit_position | bit_value |
|---|---|
| 0 | 1 |
| 1 | 2 |
| 2 | 4 |
| 3 | 8 |
| 7 | 128 |
科學記號轉換
將數值轉換為科學記號表示:
SELECT
value,
value / POWER(10, FLOOR(LOG10(ABS(value)))) AS mantissa,
FLOOR(LOG10(ABS(value))) AS exponent
FROM
measurements
WHERE
value <> 0;
特殊情況
0 的次方
SELECT POWER(0, 2); -- 結果:0
SELECT POWER(0, 0); -- 結果:1(數學上有爭議,但大多數資料庫返回 1)
負數的分數次方
SELECT POWER(-8, 1/3.0);
-- 某些資料庫可能返回 NULL 或錯誤,因為負數的分數次方在實數範圍內可能無定義
相關函數
-- 以下表達式結果相同
SELECT SQRT(16); -- 結果:4
SELECT POWER(16, 0.5); -- 結果:4
注意事項
POWER(NULL, n)或POWER(n, NULL)的結果是NULL。- 當底數為負數且指數為非整數時,結果可能為
NULL或產生錯誤。 - 對於非常大的指數,結果可能超出資料型別的範圍(溢位)。