web-dev-qa-db-ja.com

型キャスト文字列を整数に - Postgres

私はVarcharの生のフィードを持つテーブルからデータをインポートしています、私はvarcharの列を文字列の列にインポートする必要があります。 <column_name>::integerto_number(<column_name>,'9999999')を使用しようとしましたが、空のフィールドがいくつかあるのでエラーが発生しています。新しいテーブルにそれらを空またはnullとして取得する必要があります。

同じ機能があるかどうかを教えてください。

107
Vijay DJ

ワイルド推測:あなたの値が空の文字列であるならば、あなたはそれをNULLに置き換えるためにNULLIFを使うことができる:

SELECT
    NULLIF(your_value, '')::int
111
Frank Heikens

さらに進んで、この合体フィールドを次のように制限することもできます。

SELECT CAST(coalesce(<column>, '0') AS integer) as new_field
from <table>
where CAST(coalesce(<column>, '0') AS integer) >= 10; 
53
tatty

空の列をNULLsとして扱う必要がある場合は、次の手順を試してください。

SELECT CAST(nullif(<column>, '') AS integer);

一方、回避する必要があるNULLの値がある場合は、次の手順を試してください。

SELECT CAST(coalesce(<column>, '0') AS integer);

私は同意します、エラーメッセージは大いに役立ちます。

25
vyegorov

NULL、特殊文字、または空文字列のためにエラーが発生しない唯一の方法は、次のようにすることです。

SELECT REGEXP_REPLACE(COALESCE(<column>, '0'), '[^0-9]*' ,'0')::integer FROM table
21
Charles Hamel

私はLukasの投稿にコメントすることができません(評判が低すぎますか?私はかなり新しいです)。

私のPGのセットアップではto_number(NULL)は動作しません、それで私の解決策は次のようになります。

SELECT CASE WHEN column = NULL THEN NULL ELSE column :: Integer END
FROM table
11
niko

値に数字以外の文字が含まれている場合は、次のように値を整数に変換できます。

SELECT CASE WHEN <column>~E'^\\d+$' THEN CAST (<column> AS INTEGER) ELSE 0 END FROM table;

CASE演算子は<column>をチェックし、整数パターンと一致する場合はレートを整数に変換し、それ以外の場合は0を返します。

8
Igor Ostrovsky