私はVarcharの生のフィードを持つテーブルからデータをインポートしています、私はvarcharの列を文字列の列にインポートする必要があります。 <column_name>::integer
とto_number(<column_name>,'9999999')
を使用しようとしましたが、空のフィールドがいくつかあるのでエラーが発生しています。新しいテーブルにそれらを空またはnullとして取得する必要があります。
同じ機能があるかどうかを教えてください。
ワイルド推測:あなたの値が空の文字列であるならば、あなたはそれをNULLに置き換えるためにNULLIFを使うことができる:
SELECT
NULLIF(your_value, '')::int
さらに進んで、この合体フィールドを次のように制限することもできます。
SELECT CAST(coalesce(<column>, '0') AS integer) as new_field
from <table>
where CAST(coalesce(<column>, '0') AS integer) >= 10;
空の列をNULL
sとして扱う必要がある場合は、次の手順を試してください。
SELECT CAST(nullif(<column>, '') AS integer);
一方、回避する必要があるNULL
の値がある場合は、次の手順を試してください。
SELECT CAST(coalesce(<column>, '0') AS integer);
私は同意します、エラーメッセージは大いに役立ちます。
NULL、特殊文字、または空文字列のためにエラーが発生しない唯一の方法は、次のようにすることです。
SELECT REGEXP_REPLACE(COALESCE(<column>, '0'), '[^0-9]*' ,'0')::integer FROM table
私はLukasの投稿にコメントすることができません(評判が低すぎますか?私はかなり新しいです)。
私のPGのセットアップではto_number(NULL)
は動作しません、それで私の解決策は次のようになります。
SELECT CASE WHEN column = NULL THEN NULL ELSE column :: Integer END
FROM table
値に数字以外の文字が含まれている場合は、次のように値を整数に変換できます。
SELECT CASE WHEN <column>~E'^\\d+$' THEN CAST (<column> AS INTEGER) ELSE 0 END FROM table;
CASE演算子は<column>をチェックし、整数パターンと一致する場合はレートを整数に変換し、それ以外の場合は0を返します。