145

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

4

10 に答える 10

151

大まかな推測: 値が空の文字列の場合、NULLIF を使用してそれを NULL に置き換えることができます。

SELECT
    NULLIF(your_value, '')::int
于 2012-05-09T14:43:39.550 に答える
60

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

SELECT CAST(coalesce(<column>, '0') AS integer) as new_field
from <table>
where CAST(coalesce(<column>, '0') AS integer) >= 10; 
于 2012-12-01T13:38:19.930 に答える
30

NULL空の列をsとして扱う必要がある場合は、これを試してください。

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

一方、NULL避ける必要がある値がある場合は、次のことを試してください。

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

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

于 2012-05-09T14:44:01.107 に答える
29

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

SELECT REGEXP_REPLACE(COALESCE(<column>::character varying, '0'), '[^0-9]*' ,'0')::integer FROM table
于 2015-06-01T20:22:41.467 に答える
15

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

私のPGセットアップto_number(NULL)では機能しないため、私の解決策は次のとおりです。

SELECT CASE WHEN column = NULL THEN NULL ELSE column :: Integer END
FROM table
于 2012-05-09T14:46:32.417 に答える