Aşağıdaki sorguyu kullanıyorum:
ALTER TABLE presales ALTER COLUMN code TYPE numeric(10,0);
bir sütunun veri türünü değiştirmek character(20)için numeric(10,0)ama hata alıyorum:
"kod" sütunu sayısal tipe dönüştürülemiyor
Aşağıdaki sorguyu kullanıyorum:
ALTER TABLE presales ALTER COLUMN code TYPE numeric(10,0);
bir sütunun veri türünü değiştirmek character(20)için numeric(10,0)ama hata alıyorum:
"kod" sütunu sayısal tipe dönüştürülemiyor
Yanıtlar:
Kullanmayı deneyebilirsiniz USING:
İsteğe bağlı
USINGmadde, yeni sütun değerinin eskiden nasıl hesaplanacağını belirtir; atlanırsa, varsayılan dönüşüm eski veri türünden yeniye atanan bir atamayla aynıdır.USINGEski türden yeni türe herhangi bir örtük veya atama yoksa, bir madde sağlanmalıdır.
Dolayısıyla bu işe yarayabilir (verilerinize bağlı olarak):
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);
codeSayısal olarak kullanılamayan bir şeyiniz varsa bu başarısız olur ; KULLANMA işlemi başarısız olursa, sütun türünü değiştirmeden önce sayısal olmayan verileri el ile temizlemeniz gerekir.
TYPE varchar(255) USING (substring(formertextcolumn from 1 for 255))
Senin Eğer VARCHARkolon (olan boş dizeleri içeren değil aynı NULLHatırlayacağınız edebileceğiniz gibi PostgreSQL için) birini varsayılan ayarlamak için aşağıdaki hattında bir şey kullanmak gerekir:
ALTER TABLE presales ALTER COLUMN code TYPE NUMERIC(10,0)
USING COALESCE(NULLIF(code, '')::NUMERIC, 0);
( bu cevabın yardımıyla bulundu )