আমি নিম্নলিখিত কোয়েরি ব্যবহার করছি:
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দফা পুরাতন থেকে নতুন কলাম মান গনা করা হবে তা নির্ধারণ; বাদ দেওয়া থাকলে, ডিফল্ট রূপান্তরটি পুরানো ডেটা টাইপ থেকে নতুন হিসাবে অ্যাসাইনমেন্টের মতো isUSINGপুরানো থেকে নতুন ধরণের কোনও অন্তর্নিহিত বা অ্যাসাইনমেন্ট কাস্ট না থাকলে একটি ধারা অবশ্যই সরবরাহ করতে হবে।
সুতরাং এটি কাজ করতে পারে (আপনার ডেটার উপর নির্ভর করে):
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যা সংখ্যায় কাস্ট করা যায় না; যদি ব্যবহার ব্যর্থ হয়, কলামের ধরণ পরিবর্তন করার আগে আপনাকে হাত দ্বারা অ-সংখ্যাসূচক ডেটা পরিষ্কার করতে হবে।
TYPE varchar(255) USING (substring(formertextcolumn from 1 for 255))
আপনার যদি VARCHARকলাম খালি স্ট্রিং (যা রয়েছে না হিসাবে একই NULLপোস্টগ্রি জন্য আপনি পুনরাহ্বান হতে পারে) আপনি একটি ডিফল্ট সেট করতে নিচের লাইনে কিছু ব্যবহার করতে হবে:
ALTER TABLE presales ALTER COLUMN code TYPE NUMERIC(10,0)
USING COALESCE(NULLIF(code, '')::NUMERIC, 0);
( এই উত্তরের সাহায্যে পাওয়া গেছে )