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を実行します。 こうすることで安全にキャストすることができます。