私は次のクエリを使用しています:
ALTER TABLE presales ALTER COLUMN code TYPE numeric(10,0);
列のデータ型を変更するcharacter(20)
にnumeric(10,0)
が、私はエラーを取得しています:
列「コード」は数値型にキャストできません
私は次のクエリを使用しています:
ALTER TABLE presales ALTER COLUMN code TYPE numeric(10,0);
列のデータ型を変更するcharacter(20)
にnumeric(10,0)
が、私はエラーを取得しています:
列「コード」は数値型にキャストできません
回答:
次を使用して試すことができますUSING
:
オプションの
USING
句は、古い列の値から新しい列の値を計算する方法を指定します。省略した場合、デフォルトの変換は、古いデータ型から新しいデータ型への代入キャストと同じです。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が失敗した場合、列タイプを変更する前に、非数値データを手動でクリーンアップする必要があります。
TYPE varchar(255) USING (substring(formertextcolumn from 1 for 255))