行動すれば次の現実

テック中心の個人ブログ

PostgreSQLで文字列型を数値型に安全にキャストする方法

PostgreSQLで文字列型を数値型に安全に型変換(キャスト)する方法を説明します。

文字列型の"1234"や"01234"を数値型の1234に変換したい場合などを想定しています。

文字列型を数値型にキャストする方法

CAST(code as integer)

このように記載することでcodeという文字列型のカラムをintegerにキャストすることができます。 ただし、このやり方だとcodeに数値以外の文字列が含まれている場合にキャストエラー(PG::InvalidTextRepresentation: ERROR等)が発生してしまいます。 例えば"12 34"ように半角スペースが入っている場合などにエラーが発生してしまいます。

安全にキャストする方法

CAST(REGEXP_REPLACE(code, '[^0-9]+', '', 'g') as integer)

キャストエラーを防ぐためにREGEXP_REPLACEを使って数値以外の文字列を空文字に置換してからCASTを実行します。 こうすることで安全にキャストすることができます。