دروس الوحدة (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;جربه
لكل طلب، قم بإظهار المعرف واليوم (فقط جزء التاريخ من order_at، من نوع التاريخ). عمودين. الطلب حسب المعرف.
إظهار التلميح
يقوم TIMESTAMP → DATE بإسقاط الوقت: order_at::date.
الحل متاح بعد 3 من المحاولات
تمرين المراجعة
بالنسبة لكل عميل، اعرض عمود التصنيف الذي يربط المعرف والبريد الإلكتروني مفصولين بـ " - " (على سبيل المثال، "1 - alice.rossi@example.com"). الطلب حسب المعرف.
إظهار التلميح
|| يتطلب عامل التشغيل معاملات من نفس النوع: يعد إرسال المعرف إلى النص هو الطريقة الأنظف.
الحل متاح بعد 3 من المحاولات