行動すれば次の現実

ほどよくモダンなシステム開発を目指しています。メインテーマは生産性、Ruby、Javascriptです。

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

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

例えばコードを扱うカラムのように、0を含む数値を扱いたい場合などのケースを想定しています。 「01234」は「1234」ではなく「01234」として扱いたいケースです。

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

CAST(code as integer)

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

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

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