EXP() 函數 (SQL EXP() Function)

EXP() 函數用於計算以自然常數 e(約等於 2.71828)為底的指數值。換句話說,EXP(x) 返回 e 的 x 次方(e^x)。

自然常數 e 是數學中非常重要的常數,在複利計算、機率統計、科學計算等領域廣泛使用。

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

EXP() 語法 (Syntax)

EXP(exponent)
  • exponent:指數值,即 e 要乘方的次數。

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

基本範例

SELECT EXP(1);   -- 結果:2.718281828459045(e 的值)
SELECT EXP(0);   -- 結果:1(任何數的 0 次方都是 1)
SELECT EXP(2);   -- 結果:7.38905609893065(e²)
SELECT EXP(-1);  -- 結果:0.36787944117144233(e⁻¹ = 1/e)
SELECT EXP(10);  -- 結果:22026.465794806718

計算連續複利

連續複利公式為 A = P × e^(rt),其中:

  • P:本金
  • r:年利率
  • t:時間(年)
  • A:最終金額
SELECT
    principal,
    annual_rate,
    years,
    ROUND(principal * EXP(annual_rate * years), 2) AS final_amount
FROM
    investments;
principalannual_rateyearsfinal_amount
100000.05311618.34
500000.03558091.82

計算機率密度(常態分佈)

常態分佈的機率密度函數中使用到 EXP()

-- 計算標準常態分佈在 x 點的機率密度
SELECT
    x,
    (1 / SQRT(2 * PI())) * EXP(-0.5 * POWER(x, 2)) AS probability_density
FROM
    data_points;

計算衰減

指數衰減公式 N = N₀ × e^(-λt)

SELECT
    initial_amount,
    decay_constant,
    time_elapsed,
    ROUND(initial_amount * EXP(-decay_constant * time_elapsed), 4) AS remaining_amount
FROM
    decay_data;

對數的逆運算

EXP()LN()(自然對數)的逆運算:

SELECT LN(10);           -- 結果:2.302585092994046
SELECT EXP(2.302585);    -- 結果:約 10

-- 驗證
SELECT EXP(LN(100));     -- 結果:100
SELECT LN(EXP(5));       -- 結果:5

計算成長率

假設每年成長率為 r,經過 t 年後的成長倍數:

SELECT
    product_name,
    growth_rate,
    years,
    ROUND(EXP(growth_rate * years), 4) AS growth_multiple
FROM
    growth_forecast;

EXP() 與 POWER() 的關係

EXP(x) 等同於 POWER(e, x),但由於 SQL 中沒有直接表示 e 的常數,通常使用 EXP(1) 來取得 e 的值:

-- 以下兩個表達式結果相同
SELECT EXP(5);                    -- 結果:148.41315910257657
SELECT POWER(EXP(1), 5);          -- 結果:148.41315910257657

相關函數

  • LOG() / LN():對數運算,為 EXP() 的逆運算。
  • POWER():任意底數的次方運算。
函數功能與 EXP 的關係
EXP(x)e 的 x 次方-
LN(x)x 的自然對數LN(EXP(x)) = x
LOG(x)x 的對數(底數視資料庫)見 LOG 文章

注意事項

  • EXP(NULL) 的結果是 NULL
  • 當指數值非常大時,結果可能超出資料型別的範圍(溢位),例如 EXP(1000) 會導致錯誤。
  • 當指數值是很大的負數時,結果會趨近於 0,可能會因精度問題而顯示為 0。