دالة SUBSTRING في MySQL: الصيغة، أمثلة، وأفضل الممارسات

1. ما هي دالة SUBSTRING؟

دالة SUBSTRING في MySQL أداة أساسية لاستخراج جزء من سلسلة نصية. باستخدام هذه الدالة، يمكنك استرجاع الجزء الضروري فقط من البيانات في قاعدة البيانات. على سبيل المثال، تُستخدم لاستخراج النطاق من عنوان بريد إلكتروني للمستخدم أو لاسترجاع قسم محدد من رمز منتج.

1.1 الصياغة الأساسية

الصياغة الأساسية لدالة SUBSTRING هي كما يلي:

SUBSTRING(str, pos)
SUBSTRING(str, pos, len)
  • str : السلسلة المستهدفة التي سيتم استخراج منها.
  • pos : الموضع الابتدائي (فهرس يبدأ من 1).
  • len : عدد الأحرف التي سيتم استخراجها (اختياري).

إذا كان pos موجبًا، فإنه يُحسب من بداية السلسلة. إذا كان سالبًا، فإنه يُحسب من النهاية. إذا تم حذف len، فإن الدالة تستخرج من الموضع المحدد حتى نهاية السلسلة.

1.2 حالات استخدام دالة SUBSTRING

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

2. الاستخدام الأساسي لدالة SUBSTRING

دعنا نلقي نظرة على مثال بسيط لفهم كيفية عملها.

2.1 استخراج جزء من سلسلة نصية

الاستعلام التالي يستخرج 6 أحرف بدءًا من الحرف الثالث في السلسلة "Hello, World!".

SELECT SUBSTRING('Hello, World!', 3, 6);

النتيجة هي "llo, W". بما أن pos يساوي 3، يبدأ من الحرف الثالث، ومع تعيين len إلى 6، يتم استخراج 6 أحرف.

2.2 حذف طول الاستخراج

إذا حذفت len، فستستخرج من الموضع المحدد حتى نهاية السلسلة.

SELECT SUBSTRING('Hello, World!', 8);

النتيجة هي "World!"، بدءًا من الحرف الثامن حتى النهاية.

2.3 الموضع السالب

استخدام قيمة سالبة يتيح لك تحديد الموضع من نهاية السلسلة.

SELECT SUBSTRING('Hello, World!', -5);

هذا الاستعلام يُعيد "orld!"، مستخرجًا آخر 5 أحرف.

3. تطبيقات عملية لدالة SUBSTRING

تُستخدم دالة SUBSTRING بشكل متكرر في عمليات البيانات الواقعية. إليك بعض الأمثلة.

3.1 استخراج النطاق من عنوان بريد إلكتروني

من خلال دمج SUBSTRING مع LOCATE، يمكنك استخراج جزء النطاق من عنوان البريد الإلكتروني.

SELECT email, SUBSTRING(email, LOCATE('@', email) + 1) AS domain FROM users;

هذا الاستعلام يسترجع السلسلة بعد رمز "@"، مما يمنحك فقط جزء النطاق.

3.2 استخراج جزء من رمز منتج

إليك مثالًا على استخراج جزء محدد من رمز منتج.

SELECT product_code, SUBSTRING(product_code, 5, 4) AS product_id FROM products;

هذا الاستعلام يستخرج 4 أحرف بدءًا من الحرف الخامس من رمز المنتج ويعرضه كعمود جديد product_id.

3.3 الاستخدام مع الاستعلامات الفرعية

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

SELECT id, SUBSTRING(description, 1, 10) AS short_desc FROM (SELECT * FROM products WHERE category = 'Electronics') AS sub;

هذا الاستعلام يستخرج أول 10 أحرف من حقل description للمنتجات التي تكون فئتها category هي 'Electronics'.

4. المقارنة مع وظائف السلاسل النصية الأخرى

وظائف أخرى ذات أغراض مشابهة لـ SUBSTRING تشمل LEFT و RIGHT و SUBSTR.

4.1 وظائف LEFT و RIGHT

  • LEFT(str, len) : يسترجع عدد الأحرف المحدد من بداية السلسلة.
  • RIGHT(str, len) : يسترجع عدد الأحرف المحدد من نهاية السلسلة.
SELECT LEFT('Hello, World!', 5);  -- "Hello"
SELECT RIGHT('Hello, World!', 6); -- "World!"

هذه الوظائف مفيدة عندما تريد استخراج جزء من السلسلة من طرف محدد.

4.2 وظيفة SUBSTR

SUBSTR هو اسم آخر لـ SUBSTRING ويمكن استخدامه بنفس الطريقة.

SELECT SUBSTR('Hello, World!', 8); -- "World!"

هذا الاستعلام يُعيد "World!" تمامًا كما تفعل SUBSTRING.

5. الاستخدام المتقدم وتحسين أداء دالة SUBSTRING

إليك كيفية استخدام SUBSTRING بشكل أكثر كفاءة وتحسين أدائه.

5.1 تحسين الأداء

استخدام SUBSTRING على مجموعات بيانات كبيرة قد يؤثر على الأداء. ضع في اعتبارك إنشاء الفهارس والتحقق من خطة تنفيذ الاستعلام عند الضرورة. إذا كنت تستخرج نفس الجزء المتكرر من السلسلة بشكل متكرر، فإن تخزين النتائج في الذاكرة المؤقتة يمكن أن يساعد أيضًا.

5.2 الاستخدام في جملة WHERE

يمكنك استخدام SUBSTRING في جملة WHERE للبحث بناءً على جزء من السلسلة.

SELECT * FROM products WHERE SUBSTRING(product_code, 1, 3) = 'ABC';

هذا الاستعلام يسترجع المنتجات التي يبدأ product_code الخاص بها بـ ‘ABC’.

6. أمثلة وأفضل الممارسات لدالة SUBSTRING

فيما يلي أمثلة عملية وأفضل الممارسات لاستخدام SUBSTRING.

6.1 مثال على الكود

العينة التالية تقسم الاسم الكامل للعميل إلى الاسم الأول والاسم الأخير.

SELECT name, SUBSTRING(name, 1, LOCATE(' ', name) - 1) AS first_name,
       SUBSTRING(name, LOCATE(' ', name) + 1) AS last_name
FROM customers;

هذا الاستعلام يستخرج الاسم الأول والاسم الأخير من اسم كامل مفصول بمسافة.

6.2 أفضل الممارسات

  • استخراج الحد الأدنى : استخرج فقط ما هو ضروري باستخدام SUBSTRING لتقليل تأثير الأداء.
  • الانتباه إلى نوع البيانات : عند تطبيق SUBSTRING على بيانات رقمية، قم بتحويلها صراحةً إلى سلسلة أولاً.
  • اعتبارات الفهرسة : قد يمنع استخدام SUBSTRING في جملة WHERE الفهارس من الاستفادة، لذا تحقق من أداء الاستعلام الخاص بك.

7. معالجة الأخطاء واختلافات الإصدارات

دعنا نتناول معالجة الأخطاء والاختلافات في سلوك SUBSTRING عبر إصدارات MySQL المختلفة.

7.1 معالجة الأخطاء

إذا كان الموضع المحدد في SUBSTRING خارج نطاق السلسلة، فإنه يُعيد سلسلة فارغة. بما أن هذا ليس خطأً، يُنصح بإضافة منطق للتحقق من النتائج مسبقًا.

7.2 اختلافات الإصدارات

اعتمادًا على إصدار MySQL الخاص بك، قد يختلف سلوك SUBSTRING. على سبيل المثال، بعض الإصدارات القديمة تتعامل مع الأحرف متعددة البايت بشكل مختلف. تحقق من التوافق بين الإصدارات وطبق الإجراءات المناسبة حسب الحاجة.