2016-04-07 17 views
0

以下のクエリpostgresを使用して列を整数型に変更しようとしました。ブール、テキスト、VARCHAR(256):postgresで列を整数またはブール値に変更できません

alter table pm_user alter column testing2 type integer using testing2::integer; 

pm_user - - テーブル名
testing2列名

上記の列は、データ型などの任意の種類になります。

「エラー:整数の入力構文が無効です」:「NULL」 'このWebサイトで以前に実行されたクエリに基づいて以下の解決策を試しましたが、機能しません。

alter table pm_user alter column testing2 type integer using (testing2::integer);         
alter table pm_user alter column testing2 type integer;    
alter table pm_user alter column testing2 type numeric using (testing2::numeric);   
alter table pm_user alter column testing2 type numeric (10,2); 

実際の問題は何ですか?どこで ポイントはnullとして入力しますか?どちらがヌルとして扱われますか?私が提供できる解決策。

alter table pm_user alter column testing2 type text using testing2::text; 
alter table pm_user alter column testing2 type varchar(256)using testing2::varchar(256); 

ブール値に対しても同じクエリが機能しません。

+0

整数型の列のデフォルト値を0に設定して、データ型を整数型に変更する必要があります。その目的のために、私はクエリを使用して "alter table pm_user alter column2 set default 0;"上記の機能は、要件のアプリケーションを介して列のデータ型を動的に変更するために必要です。 –

答えて

2

エラーメッセージは、列に "実際の"ヌル値の代わりに文字列リテラル'NULL'が含まれていることを示しています。 -

だから、文字列を数値に変換する式はそのの世話をしなければならない

create table pm_user (testing2 varchar); 
insert into pm_user (testing2) values ('NULL'); 

NULLと同じではないことに注意してください'NULL'):このような何か。

以下は、varchar列を整数に変換します。適切な整数ではありません、その列の任意の値は、nullに変更されます:

alter table pm_user alter column testing2 type integer 
    using case when testing2 ~ '^[-+0-9]+$' then testing2::integer else null end; 

~は、正規表現のためのPostgres'演算子です。 testing2 ~ '^[0-9]+$'列に数値のみが含まれているかどうかをテストします。

+0

@muistooshort:良い点、ありがとう。 –

+0

このクエリは機能しますが、列をチェックして、列のデータはすべての行で空です。それはなぜ「ヌル」を示すのですか? –

+0

私はブール値のために何ができますか?以前のクエリのようにfalseまたはtrueに設定する必要がありますか? –

関連する問題