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_idprincipalannual_rateyearsfinal_amount
1100000.05311576.25
2500000.03557963.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_positionbit_value
01
12
24
38
7128

科學記號轉換

將數值轉換為科學記號表示:

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 或錯誤,因為負數的分數次方在實數範圍內可能無定義

相關函數

  • SQRT():平方根,等同於 POWER(x, 0.5)
  • EXP():以自然常數 e 為底的指數,等同於 POWER(e, x)
  • LOG():對數運算,為 POWER 的逆運算。
-- 以下表達式結果相同
SELECT SQRT(16);       -- 結果:4
SELECT POWER(16, 0.5); -- 結果:4

注意事項

  • POWER(NULL, n)POWER(n, NULL) 的結果是 NULL
  • 當底數為負數且指數為非整數時,結果可能為 NULL 或產生錯誤。
  • 對於非常大的指數,結果可能超出資料型別的範圍(溢位)。