$ man cast
CAST
型変換値を別の型に変換する。CAST は標準 SQL、:: は PostgreSQL の短い書き方。
呼び出しの形
CAST(値 AS 型) 値::型
つまずきやすいところ
::は PostgreSQL 固有です。標準 SQL はCAST(値 AS 型)で、移植するならこちらを使ってください。整数どうしの割り算は切り捨てられます。小数がほしいなら、割る前に型を変えてください。
変換に失敗すると実行時エラーです。1 行でも変換できない値があれば、問い合わせ全体が落ちます。
「失敗したら NULL」という型変換は PostgreSQL 18 にはありません。
pg_input_is_validで先に調べるか、条件で絞り込んでください。
実行例
結果は実際に流したものです。同じ SQL を 自由に打てる画面 で試すと、同じ結果になります。
SELECT 7 / 2 AS seisu_warizan, CAST(7 AS numeric) / 2 AS shousu, 7::numeric / 2 AS pg_no_kakikata
| seisu_warizan | shousu | pg_no_kakikata |
|---|---|---|
| 3 | 3.5000000000000000 | 3.5000000000000000 |
1 行
型を変えないと 3 になります。:: は PostgreSQL 固有の書き方です。
SELECT name, hired_on, CAST(hired_on AS text) AS moji, name || ' (' || CAST(salary AS text) || ')' AS renketsu FROM shain ORDER BY shain_id| name | hired_on | moji | renketsu |
|---|---|---|---|
| 鈴木 | 2014-04-01 | 2014-04-01 | 鈴木 (980000) |
| 佐藤 | 2016-10-01 | 2016-10-01 | 佐藤 (720000) |
| 田中 | 2019-04-01 | 2019-04-01 | 田中 (520000) |
| 中村 | 2020-04-01 | 2020-04-01 | 中村 (530000) |
| 小林 | 2024-04-01 | 2024-04-01 | 小林 (445050) |
| 加藤 | 2018-04-01 | 2018-04-01 | 加藤 (610000) |
| 吉田 | 2022-10-01 | 2022-10-01 | 吉田 (468000) |
| 山田 | 2015-04-01 | 2015-04-01 | 山田 (700000) |
18 行(うち 8 行を表示)
SELECT pg_input_is_valid('123', 'integer') AS kekka_ok, pg_input_is_valid('abc', 'integer') AS kekka_ng| kekka_ok | kekka_ng |
|---|---|
| true | false |
1 行
PostgreSQL 固有の関数です。落ちてから気づくのではなく、事前に判定できます。
説明
CAST(値 AS 型) は標準 SQL の型変換です。PostgreSQL には 値::型 という短い書き方もありますが、こちらは PostgreSQL 固有なので、他の製品でも動かしたいなら CAST を使ってください。
よく使う場面は 3 つあります。
- 整数どうしの割り算を小数にしたいとき(整数のままだと切り捨てられます)
double precisionをnumericにして、2 引数のROUNDを使いたいとき- 数値や日付を文字列にして、連結したいとき
⚠️ 変換できない値を渡すと実行時エラーになります。文字列を数値にするような変換は、データが 1 行でも汚れていれば問い合わせ全体が落ちます。
PostgreSQL 18 には「失敗したら NULL を返す」型変換はありません(CAST(... DEFAULT ... ON ERROR) は構文エラーになります)。代わりに pg_input_is_valid(値, 型名) で変換できるかどうかを先に調べられます。⚠️ これは PostgreSQL 固有なので、移植を考えるなら WHERE 列 ~ '^[0-9]+$' のような条件であらかじめ絞り込むほうが安全です。
次に読む
関係する関数
根拠にした一次情報
- PostgreSQL 18 マニュアル: 式の評価(型キャスト)(2026-09-02 確認)