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

ما هي السلسلة الفرعية ()؟
الدالة SUBSTRING() هي دالة في SQL تتيح هذه الخاصية للمستخدم استخراج سلسلة فرعية من أي سلسلة نصية معطاة حسب الحاجة. مثال: SUBSTRING()tracتُستخدم الدالة SUBSTRING() في لغة SQL لإرجاع جزء محدد من سلسلة نصية ذات طول معين، بدءًا من موقع محدد في سلسلة نصية مُدخلة.
بناء جملة السلسلة الفرعية ()
SUBSTRING(Expression, Starting Position, Total Length)
هنا:
- تعبير SUBSTRING() في ملقم SQL يمكن أن يكون أي حرف أو رمز ثنائي أو نص أو صورة. والتعبير هو سلسلة المصدر التي يتم استخراج السلسلة الفرعية منها.
- تحدد نقطة البداية الموضع في التعبير الذي يجب أن تبدأ منه السلسلة الفرعية الجديدة.
- الطول الإجمالي هو الطول المتوقع الإجمالي للسلسلة الفرعية الناتجة عن التعبير، بدءًا من موضع البداية.
قواعد استخدام SUBSTRING()
- جميع الوسائط الثلاثة إلزامية في دالة SUBSTRING() في MS SQL.
- إذا كان موضع البداية أكبر من الحد الأقصى لعدد الأحرف في التعبير، فلن يتم إرجاع أي شيء بواسطة دالة SUBSTRING() في SQL Server.
- قد يتجاوز الطول الإجمالي الحد الأقصى لطول السلسلة الأصلية. في هذه الحالة، تكون السلسلة الفرعية الناتجة هي السلسلة بأكملها، بدءًا من موضع البداية في التعبير وحتى آخر حرف فيه.
يوضح الرسم البياني أدناه استخدام دالة SUBSTRING() في SQL Server:
أمثلة على سلسلة فرعية T-SQL
الافتراض: افترض أن لدينا جدولًا باسم 'Guru99' مع عمودين وأربعة صفوف، كما هو موضح أدناه. سنستخدم هذا 'Guruجدول 99 في الأمثلة التالية:
الاستعلام 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).




