মডিউল পাঠ (4/4)
CAST এবং টাইপ রূপান্তর
SQL দৃঢ়ভাবে টাইপ করা হয়েছে: প্রতিটি কলামের একটি প্রকার রয়েছে (INTEGER, TEXT,
NUMERIC, DATE, TIMESTAMP…), এবং অনেক অপারেশনের প্রকারের প্রয়োজন
মিলতে যখন তারা না — অথবা যখন আপনি একটি মান বিন্যাস করতে চান
ভিন্নভাবে — আপনি একটি কাস্ট ব্যবহার করেন।
দুটি সমতুল্য বাক্য গঠন
-- SQL standard:
CAST(123 AS TEXT)
-- PostgreSQL shorthand (più comune nella pratica):
123::textদুটি রূপ অভিন্ন। শর্টহ্যান্ড ::type আরও কমপ্যাক্ট এবং
অন্যান্য অভিব্যক্তির সাথে সুন্দরভাবে চেইন করুন:
SELECT ordered_at::date AS day,
(oi.quantity * oi.unit_price)::numeric(10,2) AS total,
id::text || ' - ' || email AS label
FROM …;ডেটাসেটে দরকারী কাস্ট
TIMESTAMP → DATE ordered_at::date
NUMERIC → INTEGER price::int -- tronca!
INTEGER → NUMERIC quantity::numeric -- per evitare div. intera
INTEGER → TEXT id::text -- per concatenare con ||
TEXT → DATE '2024-03-05'::date
NUMERIC → TEXT price::text -- per LIKE su numeriযখন একটি কাস্ট ব্যর্থ হতে পারে
SELECT 'abc'::int; -- ERRORE: invalid input syntax for type integer
SELECT '12.5'::int; -- ERRORE: invalid input syntax for type integer
SELECT 12.5::int; -- 12 (cast numerico-numerico: arrotonda)স্ট্রিং → সংখ্যা বা স্ট্রিং → তারিখ থেকে কাস্টগুলি সবচেয়ে ঝুঁকিপূর্ণ:
স্ট্রিং প্রত্যাশিত সঠিকভাবে মেলে না হলে তারা একটি ত্রুটি উত্থাপন করে
বিন্যাস উত্পাদনে, বাহ্যিক ডেটাতে, প্রথমে যাচাই করা ভাল
TRIM / LOWER / regex এর সাথে।
কাস্ট এবং দ্বারা আদেশ
একটি কেস যা সূক্ষ্ম বাগ তৈরি করে: সংখ্যা বাছাই পাঠ্য হিসাবে সংরক্ষিত।
SELECT '2', '10', '1' ORDER BY 1; -- '1', '10', '2' (alfabetico!)সমাধান: ORDER BY এর ভিতরে কাস্ট করুন:
SELECT code FROM articles ORDER BY code::int;চেষ্টা করে দেখুন
প্রতিটি অর্ডারের জন্য, আইডি এবং দিন দেখান (শুধুমাত্র অর্ডারের তারিখের অংশ, প্রকারের তারিখ)। দুই কলাম। আইডি দিয়ে অর্ডার করুন।
ইঙ্গিত দেখান
TIMESTAMP → DATE কাস্ট সময় কমিয়ে দেয়: ordered_at::date।
সমাধান 3 প্রচেষ্টার পরে উপলব্ধ
ব্যায়াম পর্যালোচনা করুন
প্রতিটি গ্রাহকের জন্য একটি লেবেল কলাম দেখান যা আইডি এবং ইমেলকে ' - ' (যেমন '1 - alice.rossi@example.com') দ্বারা পৃথক করে। আইডি দিয়ে অর্ডার করুন।
ইঙ্গিত দেখান
দ || অপারেটরের একই ধরনের অপারেন্ড প্রয়োজন: টেক্সট আইডি কাস্ট করা সবচেয়ে পরিষ্কার উপায়।
সমাধান 3 প্রচেষ্টার পরে উপলব্ধ