$ man power
POWER / ^
数値関数べき乗を求める。引数の型で戻り値の型と精度が変わる。
呼び出しの形
POWER(底, 指数) 底 ^ 指数
つまずきやすいところ
引数の型で戻り値の型が変わります。 整数どうしなら
double precisionです。厳密に比べたいならnumericを渡してください。^は PostgreSQL 固有です。多くの製品では XOR なので、移すとエラーにならずに違う値を返します。浮動小数点の結果を
=で比べないでください。誤差で一致しないことがあります。
実行例
結果は実際に流したものです。同じ SQL を 自由に打てる画面 で試すと、同じ結果になります。
SELECT POWER(2, 10) AS p, 2 ^ 10 AS caret, pg_typeof(POWER(2, 10)) AS kata, POWER(2, 0.5) AS heihoukon, SQRT(2) AS sqrt_de
| p | caret | kata | heihoukon | sqrt_de |
|---|---|---|---|---|
| 1024 | 1024 | double precision | 1.4142135623730950 | 1.4142135623730951 |
1 行
整数どうしだと double precision になります。0.5 乗は平方根ですが、SQRT とは最後の桁が違います(型と計算の経路が違うため)。
SELECT POWER(10, 2) = 100 AS seisuu_nara_ok, POWER(10, 0.5) * POWER(10, 0.5) = 10 AS ukisousuuten_wa_gosa
| seisuu_nara_ok | ukisousuuten_wa_gosa |
|---|---|
| true | false |
1 行
同じ値になるはずの計算でも、等号では一致しないことがあります。
説明
POWER(a, b) は a の b 乗を返します。PostgreSQL には ^ 演算子もあります。
⚠️ 引数の型で戻り値の型が変わります。整数どうしを渡すと double precision(浮動小数点)になり、numeric が混ざると numeric になります。浮動小数点は誤差が出るので、金額や厳密な比較には numeric を使ってください。
⚠️ ^ は PostgreSQL 固有です。多くの製品では ^ は排他的論理和(XOR)を意味するので、そのまま移すとエラーにならずに違う値を返します。移植するなら POWER を使ってください。
指数に小数を渡せば平方根なども求められますが、平方根なら SQRT のほうが意図が伝わります。
次に読む
根拠にした一次情報
- PostgreSQL 18 マニュアル: 数学関数と演算子(2026-09-02 確認)