Můžete zkusit použít USING
:
Volitelné
USING
klauzule určuje, jak vypočítat hodnotu nového sloupce ze starého; pokud je vynechán, výchozí převod je stejný jako přetypování přiřazení ze starého datového typu na nový. AUSING
klauzule musí být poskytnuta, pokud neexistuje žádné implicitní nebo přiřazení přetypování ze starého na nový typ.
Takže by to mohlo fungovat (v závislosti na vašich datech):
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);
Toto selže, pokud máte v code
cokoli které nelze přetypovat na numerické; pokud se USING nezdaří, budete muset před změnou typu sloupce ručně vyčistit nečíselná data.