مرکزی مواد پر جائیں
ماڈیول 6 · سبق 4 از 4کورس میں 24/57~10 min
ماڈیول اسباق (4/4)

CAST اور قسم کے تبادلوں

SQL مضبوطی سے ٹائپ کیا جاتا ہے: ہر کالم کی ایک قسم ہوتی ہے (INTEGER, TEXT, NUMERIC, DATE, TIMESTAMP…)، اور بہت سے آپریشنز کو اقسام کی ضرورت ہوتی ہے مماثلت کے لیے۔ جب وہ نہیں کرتے — یا جب آپ کسی قدر کو فارمیٹ کرنا چاہتے ہیں۔ مختلف طریقے سے — آپ کاسٹ استعمال کرتے ہیں۔

دو مساوی نحو

SQL
-- SQL standard:
CAST(123 AS TEXT)

-- PostgreSQL shorthand (più comune nella pratica):
123::text

دونوں شکلیں ایک جیسی ہیں۔ شارٹ ہینڈ ::type زیادہ کمپیکٹ اور ہے۔ دوسرے اظہار کے ساتھ اچھی طرح سے زنجیریں:

SQL
SELECT ordered_at::date AS day,
       (oi.quantity * oi.unit_price)::numeric(10,2) AS total,
       id::text || ' - ' || email AS label
FROM   …;

ڈیٹاسیٹ پر مفید کاسٹ

SQL
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

جب کاسٹ ناکام ہو سکتی ہے۔

SQL
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 کے ساتھ۔

کاسٹ اور آرڈر بذریعہ

ایک ایسا کیس جو باریک کیڑے پیدا کرتا ہے: نمبروں کو چھانٹنا بطور متن ذخیرہ۔

SQL
SELECT '2', '10', '1' ORDER BY 1;  -- '1', '10', '2'   (alfabetico!)

حل: اندر کاسٹ کریں ORDER BY:

SQL
SELECT code FROM articles ORDER BY code::int;

اسے آزمائیں

ورزش#sql.m6.l4.e1
کوششیں: 0لوڈ ہو رہا ہے…

ہر آرڈر کے لیے، آئی ڈی اور دن دکھائیں (صرف تاریخ کا حصہ، قسم کی تاریخ)۔ دو کالم۔ آئی ڈی سے آرڈر کریں۔

ایڈیٹر لوڈ ہو رہا ہے…
اشارہ دکھائیں۔

TIMESTAMP → DATE کاسٹ وقت کو کم کرتا ہے: ordered_at::date۔

3 کوششوں کے بعد حل دستیاب ہے۔

ورزش کا جائزہ لیں۔

ورزش#sql.m6.l4.e2
کوششیں: 0لوڈ ہو رہا ہے…

ہر گاہک کے لیے ایک لیبل کالم دکھائیں جو id اور ای میل کو ' - ' (جیسے '1 - alice.rossi@example.com') سے الگ کرتا ہے۔ آئی ڈی سے آرڈر کریں۔

ایڈیٹر لوڈ ہو رہا ہے…
اشارہ دکھائیں۔

|| آپریٹر کو اسی قسم کے آپرینڈز کی ضرورت ہوتی ہے: آئی ڈی کو ٹیکسٹ میں کاسٹ کرنا صاف ترین طریقہ ہے۔

3 کوششوں کے بعد حل دستیاب ہے۔