1. ホーム
  2. postgresql

[解決済み] PostgreSQL 8.4でカラムのデータ型を文字から数値に変更する方法

2022-05-26 07:34:26

質問

私は以下のクエリを使用しています。

ALTER TABLE presales ALTER COLUMN code TYPE numeric(10,0); 

からカラムのデータ型を変更するために character(20) から numeric(10,0) に変更しましたが、エラーが発生します。

列の "code" を数値型にキャストすることはできません。

どのように解決するのですか?

あなたは USING :

オプションの USING 節は、古いカラムの値から新しいカラムの値を計算する方法を指定します。省略された場合、デフォルトの変換は古いデータ型から新しいデータ型への代入キャストと同じになります。A USING 節は、古いデータ型から新しいデータ型への暗黙のまたは代入キャストが存在しない場合に提供されなければなりません。

というわけで、これは(データによっては)うまくいくかもしれません。

alter table presales alter column code type numeric(10,0) using code::numeric;
-- Or if you prefer standard casting...
alter table presales alter column code type numeric(10,0) using cast(code as numeric);

の中に何かあると失敗します。 code に数値にキャストできないものがある場合、これは失敗します。USINGが失敗した場合、列の型を変更する前に、非数値データを手作業でクリーンアップする必要があります。