دوال النصوص (String Functions)

دوال النصوص في SQL (String Functions) هي مجموعة قوية من الأدوات المدمجة في لغة SQL لمعالجة وتنسيق البيانات النصية. من خلال دوال النصوص في SQL، يمكنك دمج النصوص، استخراج أجزاء منها، تحويل الحالة، إزالة المسافات، البحث والاستبدال، وغير ذلك الكثير. في هذا الدرس الشامل من سلسلة تعلم لغة SQL باللغة العربية، سنتعلم أهم دوال النصوص في SQL مثل CONCAT, SUBSTRING, UPPER, LOWER, TRIM, LENGTH, REPLACE وكيفية استخدامها في استعلامات SQL لمعالجة البيانات النصية في قواعد البيانات بشكل احترافي.

1. ما هي دوال النصوص في SQL؟

دوال النصوص في SQL (String Functions) هي دوال مدمجة في لغة SQL تُستخدم لمعالجة وتحويل البيانات النصية. تتيح لك دوال النصوص في SQL تنفيذ عمليات متنوعة على الأعمدة النصية مثل الدمج، الاستخراج، التحويل، والبحث، مما يجعل استعلامات SQL أكثر مرونة وقوة.

أهم دوال النصوص في SQL
دالة SQL الوصف مثال
CONCAT() دمج نصوص متعددة في SQL CONCAT('Hello', ' ', 'World')
SUBSTRING() استخراج جزء من نص في SQL SUBSTRING('Hello', 1, 3)
UPPER() تحويل إلى أحرف كبيرة في SQL UPPER('hello')
LOWER() تحويل إلى أحرف صغيرة في SQL LOWER('HELLO')
TRIM() إزالة المسافات في SQL TRIM(' text ')
LENGTH() حساب طول النص في SQL LENGTH('Hello')
REPLACE() استبدال نص في SQL REPLACE('Hello', 'H', 'J')

2. دالة CONCAT في SQL - دمج النصوص

دالة CONCAT في SQL تُستخدم لدمج نصين أو أكثر في نص واحد. هذه من أكثر دوال النصوص في SQL استخداماً لإنشاء أسماء كاملة، عناوين، أو رسائل مخصصة.

صيغة CONCAT في SQL
صيغة دالة CONCAT في SQL
-- MySQL/PostgreSQL
CONCAT(string1, string2, string3, ...)

-- SQL Server
string1 + string2 + string3

-- أو استخدم CONCAT في SQL Server أيضاً
CONCAT(string1, string2, string3, ...)
مثال 1: دمج الاسم الأول والأخير في SQL
جدول employees في SQL
+----+------------+-----------+--------+
| id | first_name | last_name | salary |
+----+------------+-----------+--------+
| 1  | أحمد       | محمد      | 5000   |
| 2  | فاطمة      | علي       | 6000   |
| 3  | سارة       | خالد      | 7000   |
+----+------------+-----------+--------+
استخدام CONCAT في SQL
SELECT 
    id,
    CONCAT(first_name, ' ', last_name) AS full_name,
    salary
FROM employees;
النتيجة
+----+---------------+--------+
| id | full_name     | salary |
+----+---------------+--------+
| 1  | أحمد محمد     | 5000   |
| 2  | فاطمة علي     | 6000   |
| 3  | سارة خالد     | 7000   |
+----+---------------+--------+
مثال 2: إنشاء رسائل مخصصة باستخدام CONCAT في SQL
رسالة ترحيبية في SQL
SELECT 
    CONCAT('مرحباً ', first_name, '! راتبك الحالي هو ', salary, ' ريال') AS welcome_message
FROM employees;
النتيجة
+------------------------------------------------+
| welcome_message                                |
+------------------------------------------------+
| مرحباً أحمد! راتبك الحالي هو 5000 ريال        |
| مرحباً فاطمة! راتبك الحالي هو 6000 ريال       |
| مرحباً سارة! راتبك الحالي هو 7000 ريال        |
+------------------------------------------------+
مثال 3: CONCAT_WS في SQL - دمج مع فاصل
CONCAT_WS في SQL
-- CONCAT_WS = CONCAT With Separator
SELECT 
    CONCAT_WS(' - ', first_name, last_name, salary) AS employee_info
FROM employees;
النتيجة
+------------------------+
| employee_info          |
+------------------------+
| أحمد - محمد - 5000     |
| فاطمة - علي - 6000     |
| سارة - خالد - 7000     |
+------------------------+

3. دالة SUBSTRING في SQL - استخراج جزء من النص

دالة SUBSTRING في SQL تُستخدم لاستخراج جزء محدد من نص. هذه من دوال النصوص في SQL المهمة جداً لاستخراج أكواد، أرقام، أو أجزاء معينة من البيانات النصية.

صيغة SUBSTRING في SQL
صيغة SUBSTRING في SQL
-- MySQL/PostgreSQL/SQL Server
SUBSTRING(string, start_position, length)

-- أو
SUBSTR(string, start_position, length)

-- ملاحظة: الموضع يبدأ من 1 في SQL
مثال 1: استخراج أول 3 أحرف في SQL
جدول products في SQL
+----+--------------+-------+
| id | product_code | price |
+----+--------------+-------+
| 1  | LAP-2024-001 | 3500  |
| 2  | MOU-2024-002 | 50    |
| 3  | SCR-2024-003 | 800   |
+----+--------------+-------+
استخدام SUBSTRING في SQL
SELECT 
    product_code,
    SUBSTRING(product_code, 1, 3) AS category,
    SUBSTRING(product_code, 5, 4) AS year,
    SUBSTRING(product_code, 10, 3) AS serial
FROM products;
النتيجة
+--------------+----------+------+--------+
| product_code | category | year | serial |
+--------------+----------+------+--------+
| LAP-2024-001 | LAP      | 2024 | 001    |
| MOU-2024-002 | MOU      | 2024 | 002    |
| SCR-2024-003 | SCR      | 2024 | 003    |
+--------------+----------+------+--------+
مثال 2: استخراج اسم النطاق من البريد الإلكتروني في SQL
استخراج النطاق في SQL
SELECT 
    email,
    SUBSTRING(email, POSITION('@' IN email) + 1) AS domain
FROM users;

4. دالتا UPPER و LOWER في SQL - تحويل الحالة

دالتا UPPER و LOWER في SQL تُستخدمان لتحويل النصوص إلى أحرف كبيرة أو صغيرة. هذه من دوال النصوص في SQL المفيدة جداً لتوحيد البيانات والمقارنات غير الحساسة لحالة الأحرف.

صيغة UPPER و LOWER في SQL
صيغة UPPER و LOWER في SQL
UPPER(string)  -- تحويل إلى أحرف كبيرة في SQL
LOWER(string)  -- تحويل إلى أحرف صغيرة في SQL
مثال 1: توحيد البيانات باستخدام UPPER في SQL
جدول users في SQL
+----+-------------------+
| id | email             |
+----+-------------------+
| 1  | Ahmed@Gmail.com   |
| 2  | FATIMA@yahoo.com  |
| 3  | sara@Outlook.COM  |
+----+-------------------+
استخدام UPPER و LOWER في SQL
SELECT 
    email AS original,
    UPPER(email) AS uppercase,
    LOWER(email) AS lowercase
FROM users;
النتيجة
+-------------------+-------------------+-------------------+
| original          | uppercase         | lowercase         |
+-------------------+-------------------+-------------------+
| Ahmed@Gmail.com   | AHMED@GMAIL.COM   | ahmed@gmail.com   |
| FATIMA@yahoo.com  | FATIMA@YAHOO.COM  | fatima@yahoo.com  |
| sara@Outlook.COM  | SARA@OUTLOOK.COM  | sara@outlook.com  |
+-------------------+-------------------+-------------------+
مثال 2: البحث غير الحساس لحالة الأحرف في SQL
بحث مع LOWER في SQL
-- البحث عن جميع رسائل Gmail بغض النظر عن الحالة
SELECT *
FROM users
WHERE LOWER(email) LIKE '%gmail.com';

5. دالة TRIM في SQL - إزالة المسافات

دالة TRIM في SQL تُستخدم لإزالة المسافات الزائدة من بداية ونهاية النص. هذه من دوال النصوص في SQL الضرورية لتنظيف البيانات المُدخلة من المستخدمين.

صيغة TRIM في SQL
صيغة TRIM في SQL
TRIM(string)           -- إزالة المسافات من الطرفين في SQL
LTRIM(string)          -- إزالة المسافات من اليسار في SQL
RTRIM(string)          -- إزالة المسافات من اليمين في SQL
TRIM(BOTH ' ' FROM string)  -- إزالة حرف معين من الطرفين
مثال 1: تنظيف البيانات باستخدام TRIM في SQL
بيانات غير نظيفة في SQL
+----+------------------+
| id | name             |
+----+------------------+
| 1  | '  أحمد  '       |
| 2  | 'فاطمة   '       |
| 3  | '   سارة'        |
+----+------------------+
استخدام TRIM في SQL
SELECT 
    name AS original,
    TRIM(name) AS trimmed,
    LENGTH(name) AS original_length,
    LENGTH(TRIM(name)) AS trimmed_length
FROM users;
النتيجة
+------------+---------+-----------------+-----------------+
| original   | trimmed | original_length | trimmed_length  |
+------------+---------+-----------------+-----------------+
| '  أحمد  ' | 'أحمد'  | 8               | 4               |
| 'فاطمة   ' | 'فاطمة' | 9               | 5               |
| '   سارة'  | 'سارة'  | 7               | 4               |
+------------+---------+-----------------+-----------------+

6. دالة LENGTH في SQL - حساب طول النص

دالة LENGTH في SQL تُستخدم لحساب عدد الأحرف في نص. هذه من دوال النصوص في SQL المفيدة للتحقق من صحة البيانات والبحث عن نصوص بطول معين.

صيغة LENGTH في SQL
صيغة LENGTH في SQL
-- MySQL/PostgreSQL
LENGTH(string)

-- SQL Server
LEN(string)
مثال 1: التحقق من طول كلمة المرور في SQL
استخدام LENGTH في SQL
SELECT 
    username,
    password,
    LENGTH(password) AS password_length,
    CASE 
        WHEN LENGTH(password) < 8 THEN 'ضعيفة'
        WHEN LENGTH(password) BETWEEN 8 AND 12 THEN 'متوسطة'
        ELSE 'قوية'
    END AS password_strength
FROM users;
مثال 2: البحث عن أسماء قصيرة في SQL
تصفية بـ LENGTH في SQL
-- البحث عن الأسماء التي طولها أقل من 5 أحرف
SELECT name, LENGTH(name) AS name_length
FROM employees
WHERE LENGTH(name) < 5;

7. دالة REPLACE في SQL - استبدال النصوص

دالة REPLACE في SQL تُستخدم لاستبدال جميع حالات نص معين بنص آخر. هذه من دوال النصوص في SQL القوية لتحديث وتنظيف البيانات النصية.

صيغة REPLACE في SQL
صيغة REPLACE في SQL
REPLACE(string, old_substring, new_substring)
مثال 1: تحديث أرقام الهواتف في SQL
استخدام REPLACE في SQL
SELECT 
    phone,
    REPLACE(phone, '-', '') AS phone_clean,
    REPLACE(phone, '05', '+9665') AS phone_international
FROM customers;
النتيجة
+--------------+-------------+---------------------+
| phone        | phone_clean | phone_international |
+--------------+-------------+---------------------+
| 055-123-4567 | 0551234567  | +96655-123-4567     |
| 050-987-6543 | 0509876543  | +96650-987-6543     |
+--------------+-------------+---------------------+
مثال 2: إخفاء معلومات حساسة في SQL
إخفاء البيانات في SQL
SELECT 
    name,
    CONCAT(
        SUBSTRING(phone, 1, 3),
        '-***-',
        SUBSTRING(phone, -4)
    ) AS masked_phone
FROM customers;

8. دوال نصية إضافية في SQL

دالة LEFT و RIGHT في SQL
LEFT و RIGHT في SQL
-- استخراج أول N حرف من اليسار في SQL
SELECT LEFT('Hello World', 5);  -- النتيجة: 'Hello'

-- استخراج آخر N حرف من اليمين في SQL
SELECT RIGHT('Hello World', 5);  -- النتيجة: 'World'
دالة REVERSE في SQL
REVERSE في SQL
-- عكس النص في SQL
SELECT REVERSE('Hello');  -- النتيجة: 'olleH'
دالة REPEAT في SQL
REPEAT في SQL
-- تكرار نص في SQL
SELECT REPEAT('*', 5);  -- النتيجة: '*****'

-- مثال عملي: إنشاء خط فاصل
SELECT CONCAT(name, ' ', REPEAT('-', 20)) AS separator
FROM employees;
دالة POSITION أو LOCATE في SQL
POSITION في SQL
-- البحث عن موضع نص في SQL
SELECT POSITION('World' IN 'Hello World');  -- النتيجة: 7

-- أو استخدم LOCATE في MySQL
SELECT LOCATE('World', 'Hello World');  -- النتيجة: 7

9. أمثلة عملية متقدمة لدوال النصوص في SQL

مثال 1: تنسيق أسماء العملاء في SQL
تنسيق متقدم في SQL
SELECT 
    CONCAT(
        UPPER(LEFT(first_name, 1)),
        LOWER(SUBSTRING(first_name, 2)),
        ' ',
        UPPER(LEFT(last_name, 1)),
        LOWER(SUBSTRING(last_name, 2))
    ) AS formatted_name
FROM customers;
مثال 2: استخراج معلومات من البريد الإلكتروني في SQL
تحليل البريد الإلكتروني في SQL
SELECT 
    email,
    SUBSTRING(email, 1, POSITION('@' IN email) - 1) AS username,
    SUBSTRING(email, POSITION('@' IN email) + 1) AS domain,
    CASE 
        WHEN LOWER(email) LIKE '%gmail.com' THEN 'Gmail'
        WHEN LOWER(email) LIKE '%yahoo.com' THEN 'Yahoo'
        WHEN LOWER(email) LIKE '%outlook.com' THEN 'Outlook'
        ELSE 'Other'
    END AS provider
FROM users;
مثال 3: تنظيف وتوحيد أرقام الهواتف في SQL
تنظيف الهواتف في SQL
SELECT 
    phone AS original,
    REPLACE(REPLACE(REPLACE(phone, '-', ''), ' ', ''), '(', '') AS cleaned,
    CONCAT(
        '+966',
        SUBSTRING(REPLACE(REPLACE(phone, '-', ''), ' ', ''), 2)
    ) AS international
FROM customers;
مثال 4: إنشاء اسم مستخدم تلقائي في SQL
توليد اسم مستخدم في SQL
SELECT 
    first_name,
    last_name,
    LOWER(CONCAT(
        LEFT(first_name, 1),
        last_name,
        SUBSTRING(CAST(id AS CHAR), -3)
    )) AS auto_username
FROM employees;
مثال 5: تقرير مفصل للعملاء في SQL
تقرير شامل في SQL
SELECT 
    CONCAT(UPPER(first_name), ' ', UPPER(last_name)) AS full_name,
    LOWER(TRIM(email)) AS email_clean,
    CONCAT(
        'العميل: ', first_name, 
        ' | البريد: ', SUBSTRING(email, 1, 20),
        ' | الهاتف: ', REPLACE(phone, '-', '')
    ) AS customer_summary,
    LENGTH(CONCAT(first_name, last_name)) AS name_length
FROM customers
WHERE LENGTH(TRIM(email)) > 0;

10. نصائح وأفضل الممارسات لدوال النصوص في SQL

1. استخدم TRIM دائماً عند مقارنة النصوص في SQL
مقارنة آمنة في SQL
-- سيء: قد تفشل المقارنة بسبب المسافات
WHERE name = 'أحمد'

-- جيد: إزالة المسافات قبل المقارنة في SQL
WHERE TRIM(name) = 'أحمد'
2. استخدم LOWER أو UPPER للمقارنات غير الحساسة في SQL

عند البحث أو المقارنة، استخدم دوال النصوص في SQL مثل LOWER أو UPPER لتجنب مشاكل حالة الأحرف.

3. احذر من NULL في دوال النصوص في SQL
تحذير: إذا كانت إحدى القيم NULL في دوال النصوص في SQL مثل CONCAT، النتيجة ستكون NULL. استخدم COALESCE لتجنب ذلك.
التعامل مع NULL في SQL
-- سيء: إذا كان middle_name هو NULL، النتيجة NULL
CONCAT(first_name, ' ', middle_name, ' ', last_name)

-- جيد: استخدام COALESCE في SQL
CONCAT(first_name, ' ', COALESCE(middle_name, ''), ' ', last_name)
4. استخدم الفهارس مع دوال النصوص في SQL بحذر

استخدام دوال النصوص في SQL على الأعمدة في WHERE قد يمنع استخدام الفهارس. حاول تخزين البيانات المُعالجة مسبقاً عند الإمكان.

5. وثّق الاستعلامات المعقدة في SQL

عند استخدام عدة دوال نصوص في SQL معاً، أضف تعليقات توضيحية لتسهيل الصيانة.

ملخص دوال النصوص في SQL
  • CONCAT في SQL: دمج نصوص متعددة في نص واحد
  • SUBSTRING في SQL: استخراج جزء محدد من نص
  • UPPER/LOWER في SQL: تحويل حالة الأحرف للتوحيد
  • TRIM في SQL: إزالة المسافات الزائدة من النصوص
  • LENGTH في SQL: حساب عدد الأحرف في نص
  • REPLACE في SQL: استبدال نص بنص آخر
  • دوال إضافية في SQL: LEFT, RIGHT, REVERSE, REPEAT, POSITION
  • Best Practice: استخدم TRIM و LOWER/UPPER للمقارنات الآمنة في SQL

الخطوة التالية: دوال التاريخ والوقت (Date Functions)

أكمل رحلتك التعليمية وانتقل إلى الدرس التالي لتعلم دوال التاريخ والوقت (Date Functions) وتطوير مهاراتك في قواعد البيانات.

الانتقال إلى الدرس التالي
المحرر الذكي

اكتب الكود وشاهد النتيجة فوراً

جرب الآن مجاناً
قناة ديف عربي

تابع أحدث الدروس والتحديثات مباشرة على واتساب

انضم الآن