دالة Substring() في SQL Server: كيفية استخدامها مع مثال

⚡ ملخص ذكي

مثال على استخدام دالة SUBSTRING() في SQL Servertracts جزء من حرف أو نص أو تعبير ثنائي، ويعيد عددًا محددًا من الأحرف من موضع بداية مختار، ويتناسب بشكل طبيعي مع CHARINDEX للتحليل القائم على المحددات.

  • ✂️ الغرض: تقوم الدالة SUBSTRING() بإرجاع جزء محدد من سلسلة نصية، مع إعطاء التعبير المصدر وموضع البداية والطول.
  • 🔢 ثلاث حجج: يُعد التعبير وموضع البداية والطول الإجمالي جميعها عناصر إلزامية في دالة SUBSTRING() في SQL Server.
  • 📍 مؤشر يبدأ من واحد: يتم احتساب موضع البداية على أساس 1، لذا فإن الحرف الأول يعتبر الموضع الأول، مما يتجنب أخطاء الإزاحة بمقدار واحد.
  • 🔎 مع فهرس الحروف: يؤدي استخدام الدالة SUBSTRING() مع الدالة CHARINDEX() إلى تحديد الفاصل واستخراجه.tracالنص الذي يسبقه أو يليه.
  • ↔️ مقابل اليسار واليمين: على عكس الدالتين LEFT() و RIGHT()، فإن الدالة SUBSTRING() مثالtracيمكن قراءة الأحرف من أي موضع، وليس فقط من الأطراف.
  • ⚠️ الحالات الحدية: طول NULL يُرجع NULL، بينما طول يتجاوز السلسلة يُرجع الباقي دون إثارة خطأ.

دالة SUBSTRING() في SQL Server مع أمثلة T-SQL

ما هي السلسلة الفرعية ()؟

الدالة SUBSTRING() هي دالة في SQL تتيح هذه الخاصية للمستخدم استخراج سلسلة فرعية من أي سلسلة نصية معطاة حسب الحاجة. مثال: SUBSTRING()tracتُستخدم الدالة SUBSTRING() في لغة SQL لإرجاع جزء محدد من سلسلة نصية ذات طول معين، بدءًا من موقع محدد في سلسلة نصية مُدخلة.

بناء جملة السلسلة الفرعية ()

SUBSTRING(Expression, Starting Position, Total Length)

هنا:

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

قواعد استخدام SUBSTRING()

  • جميع الوسائط الثلاثة إلزامية في دالة SUBSTRING() في MS SQL.
  • إذا كان موضع البداية أكبر من الحد الأقصى لعدد الأحرف في التعبير، فلن يتم إرجاع أي شيء بواسطة دالة SUBSTRING() في SQL Server.
  • قد يتجاوز الطول الإجمالي الحد الأقصى لطول السلسلة الأصلية. في هذه الحالة، تكون السلسلة الفرعية الناتجة هي السلسلة بأكملها، بدءًا من موضع البداية في التعبير وحتى آخر حرف فيه.

يوضح الرسم البياني أدناه استخدام دالة SUBSTRING() في SQL Server:

رسم توضيحي يُبين كيفية عمل دالة SUBSTRING()tracعدد الأحرف من موضع البداية لطول معين

أمثلة على سلسلة فرعية T-SQL

الافتراض: افترض أن لدينا جدولًا باسم 'Guru99' مع عمودين وأربعة صفوف، كما هو موضح أدناه. سنستخدم هذا 'Guruجدول 99 في الأمثلة التالية:

Guruجدول عينة مكون من 99 عمودًا يحتوي على عمودين Tutorial_ID و Tutorial_name، تم استخدامهما في أمثلة SUBSTRING

الاستعلام 1: دالة SUBSTRING() في لغة SQL بطول أقل من الطول الأقصى الإجمالي للتعبير.

SELECT Tutorial_name, SUBSTRING(Tutorial_name,1,2) As SUB from Guru99;

النتيجة: يعرض الرسم البياني أدناه السلسلة الفرعية من عمود "اسم_الدرس" كعمود "الفرع". موضع البداية هو 1 والطول هو 2، لذا يتم إرجاع أول حرفين.

شبكة النتائج التي تعرض أول حرفين من اسم البرنامج التعليمي كعمود فرعي

الاستعلام 2: دالة SUBSTRING() في SQL Server بطول أكبر من الطول الأقصى الإجمالي للتعبير.

SELECT Tutorial_name, SUBSTRING(Tutorial_name,2,8) As SUB from Guru99;

النتيجة: يعرض الرسم البياني أدناه جزءًا من عمود "Tutorial_name" كعمود "SUB". على الرغم من أن طول الجزء أكبر من الحد الأقصى لطول التعبير، إلا أنه لا يظهر أي خطأ، ويعيد الاستعلام السلسلة الكاملة من الموضع الأول فصاعدًا.

شبكة النتائج التي تُعيد الجزء المتبقي من اسم البرنامج التعليمي عندما يتجاوز الطول المطلوب السلسلة

دالة SUBSTRING مع CHARINDEX في SQL Server

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

CHARINDEX(substring_to_find, expression [, start_location])

من خلال تضمين الدالة CHARINDEX() داخل الدالة SUBSTRING()، يصبح موضع البداية ديناميكيًا. المثال أدناه يجد @ الرمز ويعيد كل شيء بعده. أ متغير يحتوي على قيمة العينة:

DECLARE @Email VARCHAR(50) = 'john.doe@guru99.com';
SELECT SUBSTRING(@Email, CHARINDEX('@', @Email) + 1, LEN(@Email)) AS Domain;

هنا، تحدد الدالة CHARINDEX('@', @Email) موضع الرمز @، وتضيف 1 للتحرك بعده، ثم تستخدم الدالة SUBSTRING() لاستخراجه.tracثم استبدل الأحرف المتبقية. بالنسبة للقيمة المذكورة أعلاه، يُرجع الاستعلام النطاق guru99.comيُعد نمط CHARINDEX-plus-SUBSTRING هذا هو الطريقة القياسية لتحليل السلاسل المهيكلة في T-SQL.

الفرق بين SUBSTRING و LEFT و RIGHT في SQL Server

يوفر SQL Server أيضًا الدالتين LEFT() و RIGHT() لاستخراج الأحرف من بداية أو نهاية سلسلة نصية. هما أقصر في الكتابة، لكنهما يقتصران على طرفي السلسلة. أما الدالة SUBSTRING() فهي الأكثر مرونة لأنها تستطيع البدء من أي موضع. يوضح الجدول أدناه مقارنة بينهما:

الوظيفة الحجج Extracts من الدالة المكافئة SUBSTRING()
LEFT(expression, n) 2 بداية السلسلة SUBSTRING(expression, 1, n)
RIGHT(expression, n) 2 نهاية السلسلة SUBSTRING(expression, LEN(expression) – n + 1, n)
SUBSTRING(expression, start, length) 3 أي منصب غير قابل للتطبيق

باختصار، يعتبر كل من LEFT() و RIGHT() اختصارات ملائمة لنهايات السلسلة، بينما يتعامل SUBSTRING() مع الحالة العامة، بما في ذلك الأحرف المأخوذة من المنتصف.

الوسائط السالبة والصفرية والفارغة في دالة SUBSTRING

إلى جانب القواعد الأساسية، من المفيد معرفة كيفية عمل دالة SUBSTRING() عند الحواف. عندما يكون موضع البداية صفرًا أو سالبًا، يحسب SQL Server طولًا فعليًا يساوي (البداية + الطول - 1) ويبدأ القراءة من الموضع الأول. عندما تكون أي وسيطة NULL، تكون النتيجة NULL. الجدول أدناه مُدقَّق مع المصدر الرسمي. SUBSTRING (Transact-SQL) يوضح المرجع هذه الحالات:

اتصل نتيجة سبب
SUBSTRING('Guru99'، 1، 4) Guru المكالمة العادية: أربعة أحرف من الموضع الأول.
SUBSTRING('Guru99'، 0، 3) Gu ابدأ من أسفل واحد: الطول الفعال هو 0 + 3 – 1 = 2.
SUBSTRING('Guru99'، 4، 100) u99 تُعيد الدالة length beyond the string الباقي، بدون أي خطأ.
SUBSTRING('Guru99', 3, NULL) اغية الوسيط NULL يجعل النتيجة بأكملها NULL.

إن معرفة هذه الحالات الاستثنائية تمنع حدوث مفاجآت عند حساب موضع البداية من عمود آخر أو متغير قد تكون القيمة صفرًا أو فارغة (NULL).

الأسئلة الشائعة

يستخدم SQL Server الدالة SUBSTRING()؛ SUBSTR() هو الاسم المستخدم في Oracle و MySQLكلاهما يُرجع جزءًا من سلسلة نصية، لكن SUBSTRING() هي دالة Transact-SQL القياسية، لذلك لن يتم تشغيل SUBSTR() على SQL Server.

نعم. بما أن دالة SUBSTRING() تُرجع قيمة، فيمكن استخدامها في عبارات WHERE و SELECT و ORDER BY. عادةً ما يمنع استخدام SUBSTRING() في عملية التصفية البحث في الفهرس، لذا فإن استخدام نمط LIKE غالبًا ما يكون أسرع في عمليات البحث عن البادئات.

نعم، لكن SQL Server يقوم أولاً بتحويل القيمة إلى سلسلة نصية، إما ضمنياً أو باستخدام CAST أو CONVERT. ثم يتم حساب موضع البداية والطول بالأحرف، وليس الأرقام أو أجزاء التاريخ، لذا يجب تنسيق القيمة بعناية.

يتصرف الشكل ذو الوسائط الثلاثة بشكل مشابه، لكن التفاصيل تختلف. MySQL كما يسمح أيضًا باستخدام SUBSTR() ومواقع البداية السالبة، بينما يستخدم SQL Server الدالة SUBSTRING() ويتعامل مع البداية الأقل من واحد باستخدام قاعدة الطول الفعال.

تُعيد الدالة SUBSTRING() نفس نوع البيانات المُدخلة: varchar للبيانات النصية، وnvarchar لنصوص Unicode، وvarbinary للتعبيرات الثنائية. يعتمد طول السلسلة الفرعية على السلسلة المطلوبة، وليس على عمود المصدر بأكمله.

التفافping يؤدي استخدام دالة SUBSTRING() داخل عبارة WHERE إلى جعل الشرط غير قابل للبحث في الفهرس، وبالتالي لا يمكن لـ SQL Server استخدام البحث في الفهرس على هذا العمود. بالنسبة لمطابقات البادئات، عادةً ما يكون نمط LIKE 'value%' أكثر فعالية.

نعم. مساعد الطيار جيثب يمكن كتابة تعبيرات SUBSTRING() و CHARINDEX()، بما في ذلك التحليل القائم على المحددات، من خلال موجه لغة طبيعية. تحقق دائمًا من موضع البداية والطول والفهرسة التي تبدأ من 1 قبل تشغيل الاستعلام.

تقوم أنظمة الذكاء الاصطناعي والتعلم الآلي بترجمة قواعد اللغة الإنجليزية البسيطة إلى تركيبات من دوال SUBSTRING() وCHARINDEX() وLEFT() وRIGHT()، وتقترح حسابات الطول، وتُشير إلى أخطاء الاختلاف بمقدار حرف واحد. ويراجع المطور كل اقتراح للتأكد من صحته قبل نشره.

تلخيص هذه التدوينة بـ: