整理と雑記

たまにリライト

PostgreSQLでtext型のデータから数値のみを抽出する

使用するデータ

以下のようなデータを用意する。カラムは全てtext型。

text_int text_varchar text_date
1000 sample1 2018-01-01
aaa sample2 2018-01-02
2147483648 sample3 2018-01-03
-2147483648 sample4 2018-01-04

数値のデータのみを抽出する

数値チェックには正規表現を使用する。

select * from text_sample where text_int ~ '[0-9]+';

結果は以下のようになる。

text_int text_varchar text_date
1000 sample1 2018-01-01
2147483648 sample3 2018-01-03
-2147483648 sample4 2018-01-04

integer型のデータのみを抽出する

数値チェックをした上で数値の大小を比較するとエラーが発生しない。

select * from text_sample where text_int ~ '[0-9]+' and (text_int::bigint <= 2147483647 and text_int::bigint >= -2147483647);

結果は以下のようになる。

text_int text_varchar text_date
1000 sample1 2018-01-01


数値チェックせずに数値の大小を比較した場合、文字列が含まれているとエラーが発生する。

select * from text_sample where text_int::bigint <= 2147483647 and text_int::bigint >= -2147483647;

ERROR: invalid input syntax for integer: "aaa"