D دالة CAST هي واحدة من دوال التحويل (Conversion Functions) في SQL، وهدفها تحويل نوع البيانات (Data Type) لقيمة معينة من نوع إلى نوع آخر. بتعتبر طريقة مرنة وسهلة للتحكم في أنواع البيانات عند كتابة الاستعلامات.


الصيغة العامة:

CAST(expression AS target_data_type)
  • الـexpression: القيمة أو العمود اللي عايز تحوله.
  • الـtarget_data_type: نوع البيانات الجديد اللي عايز القيمة تتحول له (زي INT, VARCHAR, DECIMAL).

Hacker Rank

The Blunder | HackerRank

 

أمثلة على استخدام CAST:

1. تحويل رقم إلى نص:

لو عندك جدول employees وعايز تحول العمود salary من رقم إلى نص:

SELECT CAST(salary AS VARCHAR) AS salary_as_text
FROM employees;
  • النتيجة: العمود salary_as_text هيحتوي على القيم كـ نصوص.

2. تحويل نص إلى رقم:

لو عندك قيمة نصية تمثل رقم وعايز تحولها لرقم لاستخدامها في العمليات الحسابية:

SELECT CAST('12345' AS INT) AS numeric_value;
  • النتيجة: القيمة النصية '12345' تتحول إلى رقم صحيح (12345).

3. تحويل رقم عشري إلى عدد صحيح:

SELECT CAST(123.45 AS INT) AS integer_value;
  • النتيجة: القيمة العشرية تتحول إلى العدد الصحيح 123 (بيحذف الجزء العشري).

4. استخدام مع العمليات الحسابية:

لو عندك عمودين، واحد عشري وواحد عدد صحيح، وعايز تتأكد إنهم بنفس النوع قبل الحساب:

SELECT CAST(decimal_column AS INT) + integer_column AS result
FROM some_table;

أهم الأنواع المستخدمة مع CAST:

النوعالوصف
INTعدد صحيح
DECIMAL(p, s)رقم عشري بدقة معينة (p: إجمالي الأرقام، s: عدد الأرقام العشرية).
VARCHAR(n)سلسلة نصوص بطول محدد
CHAR(n)سلسلة نصوص ثابتة الطول
DATEتاريخ
DATETIMEتاريخ ووقت

أمثلة عملية:

تحويل التاريخ إلى نص:

SELECT CAST(GETDATE() AS VARCHAR) AS current_date_as_text;
  • النتيجة: تحويل التاريخ الحالي إلى نص.

تحويل النص إلى تاريخ:

لو عندك عمود نصي يمثل تواريخ وتحتاج تعمل عليه عمليات خاصة بالتاريخ:

SELECT CAST('2023-12-01' AS DATE) AS converted_date;
  • النتيجة: النص '2023-12-01' يتحول إلى تاريخ.

ملاحظات مهمة:

  1. إذا كانت البيانات غير قابلة للتحويل:

    • لو حاولت تحول نص زي 'ABC' إلى رقم باستخدام CAST، هيظهر خطأ.
    SELECT CAST('ABC' AS INT);
    -- Error: Conversion failed when converting the varchar value 'ABC' to data type int.
  2. التعامل مع NULL:

    • إذا كانت القيمة NULL، هتظل NULL بعد التحويل.
  3. استخدام مع أداء العمليات:

    • استخدم CAST لما تكون الأنواع مختلفة بين الأعمدة وتحتاج توافقهم في استعلام معين.

مقارنة بين CAST و CONVERT:

  • CAST: قياسية ومتوافقة مع أغلب أنظمة SQL.
  • CONVERT: خاصة بـ SQL Server وتوفر خيارات إضافية مثل تنسيق التواريخ.

مثال على CONVERT:

SELECT CONVERT(VARCHAR, GETDATE(), 101) AS formatted_date;
  • هنا يتم تحويل التاريخ إلى نص بتنسيق MM/DD/YYYY.

الخلاصة:

  • CAST بتستخدم لتحويل نوع البيانات بطريقة مرنة وسهلة.
  • مفيدة جدًا لما تحتاج تعمل توافق بين أنواع مختلفة أو تحلل بيانات مش متوافقة.
  • تأكد من قابلية البيانات للتحويل لتجنب الأخطاء.