وظائف حرف SQL. حول وظائف سلسلة SQL أو كيفية التعامل مع النص في قاعدة بيانات MySQL

وظائف حرف SQL.  حول وظائف سلسلة SQL أو كيفية التعامل مع النص في قاعدة بيانات MySQL
وظائف حرف SQL. حول وظائف سلسلة SQL أو كيفية التعامل مع النص في قاعدة بيانات MySQL

فيما يلي قائمة كاملة بوظائف السلسلة المأخوذة من BOL:

أسكي نشار سونديكس
شار باتندكس فضاء
شاريندكس يستبدل STR
اختلاف اسم الاقتباس أشياء
غادر استنساخ سلسلة فرعية
لين يعكس يونيكود
أدنى يمين العلوي
لتريم رتريم

لنبدأ بوظيفتين عكسيتين متبادلتين - أسكيو شار.

ترجع الدالة ASCII رمز ASCII للحرف الموجود في أقصى اليسار لتعبير السلسلة الذي يمثل وسيطة الدالة.

إليك، على سبيل المثال، كيفية تحديد عدد الأحرف المختلفة التي تبدأ أسماء السفن في جدول السفن:


وتجدر الإشارة إلى أنه يمكن الحصول على نتيجة مماثلة بسهولة أكبر باستخدام وظيفة أخرى - غادر، والذي يحتوي على بناء الجملة التالي:

غادر (<تعبير السلسلة>, <تعبير عدد صحيح>)

ويقطع عدد الأحرف من اليسار المحدد بواسطة الوسيطة الثانية من السلسلة التي تمثل الوسيطة الأولى. لذا،

اختر اليسار المميز (الاسم، 1) من السفن، اطلب حسب 1

إليك كيفية، على سبيل المثال، الحصول على جدول رموز لجميع الأحرف الأبجدية:

حدد CHAR(ASCII("a")+ num-1) letter، ASCII("a")+ num - 1
من (اختر 5*5*(أ-1)+5*(ب-1) + ج AS رقم
من (اختر 1 أ اتحاد الكل حدد 2 اتحاد الكل حدد 3 اتحاد الكل حدد 4 اتحاد الكل حدد 5) x
تقاطع الانضمام
(حدد 1 ب اتحاد الكل حدد 2 اتحاد الكل حدد 3 اتحاد الكل حدد 4 اتحاد الكل حدد 5) y
تقاطع الانضمام
(SELECT 1 c UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5) z
) ×
حيث ASCII("a")+ num -1 بين ASCII("a") وASCII("z")

بالنسبة لأولئك الذين لم يعرفوا بعد كيفية إنشاء تسلسل رقمي، أحيلكم إلى المقالة المقابلة.

كما تعلم، تختلف رموز الأحرف الصغيرة والأحرف الكبيرة. لذلك، للحصول على المجموعة الكاملة دون إعادة كتابة الطلب، ما عليك سوى إضافة طلب مشابه للكود أعلاه:


أعتقد أنه لن يكون من الصعب إضافة هذه الرسالة إلى الجدول إذا لزم الأمر.

دعونا الآن نفكر في مهمة تحديد مكان العثور على السلسلة الفرعية المطلوبة في تعبير السلسلة. يمكن استخدام وظيفتين لهذا - شاريندكسو باتندكس. كلاهما يعيد موضع البداية (موضع الحرف الأول من السلسلة الفرعية) للسلسلة الفرعية في السلسلة. تحتوي الدالة CHARINDEX على بناء الجملة:

تشاريندكس( search_expression, string_expression[, يبدأ فى مكان])

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

تجدر الإشارة إلى أنه إذا كانت السلسلة الفرعية أو تعبير السلسلة الذي تم البحث عنه NULL، فستكون نتيجة الوظيفة NULL أيضًا.

يحدد المثال التالي موضع التواجد الأول والثاني للحرف "a" في اسم السفينة "California"

حدد CHARINDEX("أ"،الاسم) first_a،
CHARINDEX("أ"، الاسم، CHARINDEX("أ"، الاسم)+1) Second_a
من السفن حيث الاسم = "كاليفورنيا"

يرجى ملاحظة أنه عند تحديد الحرف الثاني في الدالة، يتم استخدام موضع البداية، وهو موضع الحرف بجوار الحرف الأول "a" - CHARINDEX("a"، name)+1. من السهل التحقق من صحة النتيجة - 2 و 10 :-).

تحتوي الدالة PATINDEX على بناء الجملة:

باتندكس("% عينة%" , string_expression)

والفرق الرئيسي بين هذه الوظيفة وCHARINDEX هو أن سلسلة البحث يمكن أن تحتوي على أحرف البدل- ٪ و _. في هذه الحالة، الأحرف الزائدة "%" مطلوبة. على سبيل المثال، استخدام هذه الوظيفة في المثال الأول سيبدو


تبدو نتيجة هذا الاستعلام كما يلي:


حقيقة أننا انتهينا بمجموعة نتائج فارغة تعني أنه لا توجد مثل هذه السفن في قاعدة البيانات. لنأخذ مجموعة من القيم - فئة السفينة واسمها.

يسمى الجمع بين قيمتين من السلسلة في قيمة واحدة سلسلة، و في خادم قاعدة البيانات لهذه العملية يتم استخدام علامة "+" (في المعيار "||"). لذا،

ماذا لو كان تعبير السلسلة يحتوي على حرف واحد فقط؟ الاستعلام سوف يطرحه. يمكنك التحقق من ذلك بسهولة عن طريق الكتابة

نواصل دراسة اللغة استعلامات SQL، واليوم سنتحدث عنه وظائف سلسلة SQL. سنلقي نظرة على وظائف السلسلة الأساسية والشائعة الاستخدام مثل: أقل، LTRIM، استبدالوغيرها، سننظر في كل شيء بالطبع باستخدام الأمثلة.

اختر الاسم || اللقب AS FIO من الجدول

أو للفصل بمسافة أدخل

اختر الاسم || " " || اللقب AS FIO من الجدول

أولئك. شريطان عموديان يجمعان عمودين في عمود واحد، وللفصل بينهما بمسافة أضع مسافة بينهما ( يمكنك استخدام أي رمز، مثل الشرطة أو النقطتين) بفواصل عليا ويتم دمجها أيضًا مع شريطين عموديين ( يستخدم Transact-SQL علامة + بدلاً من شريطين عموديين).

وظيفة INITCAP

ما يلي هو أيضا جدا ميزة مفيدة, INITCAP- الذي يُرجع القيمة في سلسلة تبدأ كل كلمة فيها بحرف كبير وتستمر بأحرف صغيرة. يعد ذلك ضروريًا إذا لم تتبع قواعد التعبئة في عمود أو آخر ومن أجل عرض الأمر برمته منظر جميليمكنك استخدام هذه الوظيفة، على سبيل المثال، في إدخالات الجدول الخاص بك في عمود الاسم النوع التالي: إيفان إيفانوف أو بيتر بيتروف، أنت تستخدم هذه الوظيفة.

حدد INITCAP (الاسم) AS FIO من الجدول

وسوف تحصل عليه مثل هذا.

وظيفة العلوي

وظيفة مماثلة، ولكنها ترجع كافة الأحرف بحرف كبير، وهذا هو العلوي.

حدد الجزء العلوي (الاسم) AS FIO من الجدول

  • الاسم - اسم العمود؛
  • 20 – عدد الحروف ( طول الحقل);
  • '-' هو رمز يجب استكماله بالعدد المطلوب من الأحرف.

وظيفة ارباد

دعونا نلقي نظرة على الدالة العكسية على الفور. ارباد- الإجراء وصياغة الجملة هما نفس LPAD، ويتم استكمال الأحرف الموجودة على اليمين فقط ( في LPAD اليسار).

حدد RPAD (الاسم، 20، "-") كاسم من الجدول

إيفان —————-
سيرجي -----

وظيفة ليتريم

بعد ذلك تأتي وظيفة مفيدة أيضًا في بعض الحالات، لتريم- تقوم هذه الوظيفة بإزالة الأحرف الموجودة في أقصى اليسار والتي تحددها. على سبيل المثال، لديك عمود "مدينة" في قاعدة البيانات الخاصة بك، حيث تتم الإشارة إلى المدينة باسم "موسكو"، وهناك أيضًا مدن تتم الإشارة إليها ببساطة باسم "موسكو". لكنك تحتاج إلى عرض التقرير فقط على شكل "موسكو" بدون "g"، ولكن كيف تفعل ذلك إذا كان هناك كذا وكذا؟ يمكنك ببساطة تحديد نوع من النمط "r". وإذا كانت الأحرف الموجودة في أقصى اليسار تبدأ بـ "g"، فلن يتم إخراج هذه الأحرف ببساطة.

حدد LTRIM (المدينة، "g.") كمدينة من الجدول

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

وظيفة رتريم

أيضًا، دعونا نلقي نظرة فورًا على الدالة العكسية. رتريم- مثل LTRIM، يتم البحث عن الأحرف الموجودة على اليمين فقط.

ملحوظة! في Transact-SQL، تقوم الدالتان RTRIM وLTRIM بإزالة المسافات على اليمين واليسار، على التوالي.

وظيفة الاستبدال

الآن دعونا ننظر إلى هذا ميزة مثيرة للاهتمامكيف يستبدل– تقوم بإرجاع سلسلة يتم فيها استبدال كافة الأحرف المطابقة بالأحرف التي تحددها. لماذا يمكن استخدامه على سبيل المثال، لديك أعمدة في قاعدة البيانات الخاصة بك تحتوي على أحرف منفصلة معينة، على سبيل المثال "/". على سبيل المثال، Ivan/Ivanov، وترغب في عرض Ivan-Ivanov، ثم اكتب

حدد استبدال (الاسم، "/"، "-") من الجدول

وسيكون لديك استبدال الشخصيات.

تستبدل هذه الوظيفة فقط المطابقة الكاملة للأحرف، إذا قمت على سبيل المثال بتحديد "—" أي. ثلاث شرطات، سيبحث عن ثلاث شرطات فقط، ولن يحل محل كل شرطة فردية، على عكس الوظيفة التالية.

وظيفة الترجمة

يترجم- دالة سلسلة تستبدل جميع الأحرف في السلسلة بالأحرف التي تحددها. استنادًا إلى اسم الوظيفة، يمكنك تخمين أن هذا عبارة عن تغذية سطرية كاملة. الفرق بين هذه الدالة و REPLACE هو أنها تستبدل كل حرف تحدده، أي. لديك ثلاثة أحرف، دعنا نقول abc وباستخدام TRANSLATE يمكنك استبدالها بـ abc بحيث يصبح لديك a=a، b=b، c=c ووفقًا لهذا المبدأ سيتم استبدال جميع الأحرف المطابقة. وإذا قمت بالاستبدال باستخدام REPLACE، فأنت كنت تبحث فقط عن تطابق كامل لأحرف ABC الموجودة في صف واحد.

وظيفة سوبستر

SUBSTRهذه الوظيفة، تقوم بإرجاع نطاق الأحرف الذي تحدده فقط. بمعنى آخر، لنفترض سلسلة مكونة من 10 أحرف، ولكنك لا تحتاج إلى كل الأحرف العشرة، ولكن لنفترض أنك تحتاج فقط إلى 3-8 ( من الثالث إلى الثامن). مع هذه الوظيفة يمكنك القيام بذلك بسهولة. على سبيل المثال، لديك نوع من المعرفات في قاعدة البيانات الخاصة بك بطول ثابت (مثل AA-BB-55-66-CC) وكل مجموعة من الأحرف تعني شيئًا ما. وفي وقت ما، طُلب منك عرض المجموعة الثانية والثالثة فقط من الأحرف، ولهذا تكتب طلبًا من النوع التالي.

حدد SUBSTR (المعرف، "4"، "8") من الجدول

أولئك. نقوم بعرض كافة الأحرف ابتداءً من الرقم 4 وتنتهي بالرقم 8، وبعد هذا الطلب سيظهر لك هذا:

دالة LENGTH - طول السلسلة

قد تكون الوظيفة التالية مفيدة أيضًا طول- الذي يحسب ببساطة عدد الأحرف في السطر. على سبيل المثال، تحتاج إلى معرفة عدد الأحرف الموجودة في كل خلية من العمود، على سبيل المثال "الاسم"، يبدو الجدول كما يلي.

حدد الطول (الاسم) من الجدول

بعد هذا الطلب سوف تتلقى هذا.

4
6
7

لذلك نظرنا إلى وظائف السلسلة الأساسية لـ SQL. في المقالات التالية سوف نستمر في دراسة لغة SQL.

آخر تحديث: 29/07/2017

يمكن استخدام الوظائف التالية للعمل مع السلاسل في T-SQL:

    LEN: إرجاع عدد الأحرف في السطر. كمعلمة، يتم تمرير سلسلة إلى الدالة التي يجب العثور على الطول لها:

    حدد LEN ("أبل") - 5

    LTRIM: يزيل المسافات البادئة من السلسلة. يأخذ السلسلة كمعلمة:

    حدد LTRIM("أبل")

    RTRIM: إزالة المسافات الزائدة من السلسلة. يأخذ السلسلة كمعلمة:

    حدد RTRIM("أبل")

    CHARINDEX: إرجاع الفهرس الذي تم العثور فيه على التواجد الأول لسلسلة فرعية في سلسلة. يتم تمرير سلسلة فرعية كمعلمة أولى، ويتم تمرير السلسلة التي سيتم البحث فيها كمعلمة ثانية:

    حدد CHARINDEX("pl"، "Apple") - 3

    PATINDEX: إرجاع الفهرس الذي تم العثور فيه على التواجد الأول لنمط معين في سلسلة:

    حدد PATINDEX("%p_e%", "Apple") -- 3

    اليسار: القطع من بداية السطر كمية معينة منالشخصيات. المعلمة الأولى للدالة هي السلسلة، والثانية هي عدد الأحرف التي يجب قطعها من بداية السلسلة:

    SELECT LEFT("Apple", 3) - التطبيق

    RIGHT: لقص عدد محدد من الأحرف من نهاية السلسلة. المعلمة الأولى للدالة هي السلسلة، والثانية هي عدد الأحرف التي يجب قطعها من بداية السلسلة:

    SELECT RIGHT("Apple", 3) - ple

    سلسلة فرعية: لقص سلسلة فرعية بطول محدد من سلسلة، بدءًا من فهرس محدد. المعلمة الأولى للدالة هي السلسلة، والثانية هي مؤشر البداية للقطع، والمعلمة الثالثة هي عدد الأحرف المراد قطعها:

    حدد سلسلة فرعية ("Galaxy S8 Plus"، 8، 2) - S8

    REPLACE: يستبدل سلسلة فرعية بأخرى داخل السلسلة. المعلمة الأولى للدالة هي سلسلة، والثانية هي السلسلة الفرعية المراد استبدالها، والثالثة هي السلسلة الفرعية المراد استبدالها بـ:

    حدد استبدال ("Galaxy S8 Plus"، "S8 Plus"، "Note 8") -- جالاكسي نوت 8

    REVERSE : يعكس السلسلة:

    حدد عكس ("123456789") - 987654321

    CONCAT: يسلسل سلسلتين في سلسلة واحدة. كمعلمة، فإنه يقبل سلسلتين أو أكثر تحتاج إلى الاتصال:

    SELECT CONCAT("Tom"، ""، "Smith") - توم سميث

    LOWER : تحويل السلسلة إلى أحرف صغيرة:

    حدد أقل ("Apple") - apple

    UPPER : يحول السلسلة إلى أحرف كبيرة

    حدد UPPER("Apple")--Apple

    المسافة: إرجاع سلسلة تحتوي على عدد محدد من المسافات

على سبيل المثال، لنأخذ الجدول:

إنشاء منتجات الجدول (معرف INT IDENTITY KEY، اسم المنتج NVARCHAR(30) NOT NULL، الشركة المصنعة NVARCHAR(20) NOT NULL، ProductCount INT DEFAULT 0، السعر MONEY NOT NULL)؛

وعند استرداد البيانات، سنستخدم وظائف السلسلة:

حدد UPPER(LEFT(Manufacturer,2)) AS الاختصار، CONCAT(ProductName, " - "، الشركة المصنعة) AS FullProdName من المنتجات، قم بالترتيب حسب الاختصار

وظائف سلسلة SQL

تسمح لك هذه المجموعة من الوظائف بمعالجة النص. هناك العديد من وظائف السلسلة، وسوف نلقي نظرة على أكثرها شيوعا.
  • CONCAT(str1,str2...) تُرجع سلسلة تم إنشاؤها عن طريق تسلسل الوسائط (الوسائط موجودة بين قوسين - str1,str2...). على سبيل المثال، يوجد في جدول الموردين عمود "المدينة" وعمود "العنوان". لنفترض أننا نريد أن يحتوي الجدول الناتج على العنوان والمدينة في نفس العمود، أي. نريد دمج البيانات من عمودين في عمود واحد. للقيام بذلك، سنستخدم الدالة النصية CONCAT()، وسنشير كوسيطات إلى أسماء الأعمدة المراد دمجها - المدينة والعنوان:

    حدد CONCAT(المدينة، العنوان) من البائعين؛


    يرجى ملاحظة أن الدمج تم دون تقسيم، وهو أمر غير قابل للقراءة. دعونا نضبط استعلامنا بحيث تكون هناك مسافة بين الأعمدة التي سيتم ضمها:

    SELECT CONCAT(city, " ", عنوان) من البائعين؛


    كما ترون، تعتبر المسافة أيضًا وسيطة ويتم الإشارة إليها مفصولة بفاصلة. إذا كان هناك المزيد من الأعمدة المراد دمجها، فإن تحديد المسافات في كل مرة سيكون غير منطقي. في هذه الحالة، يمكن للمرء استخدام وظيفة السلسلة CONCAT_WS(فاصل، str1، str2...)، الذي يضع فاصلًا بين السلاسل المتسلسلة (يتم تحديد الفاصل باعتباره الوسيط الأول). سيبدو استعلامنا بعد ذلك كما يلي:

    SELECT CONCAT_WS(" "، المدينة، العنوان) من البائعين؛

    لم تتغير النتيجة خارجيًا، ولكن إذا قمنا بضم 3 أو 4 أعمدة، فسيتم تقليل الكود بشكل كبير.


  • INSERT(str، pos، len، new_str)تُرجع السلسلة النصية مع السلسلة الفرعية التي تبدأ من الموضع pos ويتم استبدال طول أحرف len بالسلسلة الفرعية new_str. لنفترض أننا قررنا عدم عرض الأحرف الثلاثة الأولى في عمود العنوان (الاختصارات st.، pr.، وما إلى ذلك)، فسنستبدلها بمسافات:

    SELECT INSERT(address, 1, 3, " ") من البائعين؛


    أي أنه يتم استبدال ثلاثة أحرف، بدءًا من الحرف الأول، بثلاث مسافات.


  • LPAD(str, len, dop_str) يُرجع السلسلة النصية المبطنة بـ dop_str بطول len. لنفترض أننا نريد عرض المدن الموردة على اليمين وملء المساحة الفارغة بالنقاط:

    حدد LPAD(city, 15, ".") من البائعين؛



  • RPAD(str, len, dop_str) يُرجع السلسلة النصية المبطنة إلى اليمين بـ dop_str إلى الطول len. لنفترض أننا نريد عرض المدن الموردة على اليسار، وملء المساحة الفارغة بالنقاط:

    حدد RPAD(city, 15, ".") من البائعين؛


    يرجى ملاحظة أن قيمة len تحدد عدد الأحرف المعروضة، أي. إذا كان اسم المدينة أطول من 15 حرفًا، فسيتم اقتطاعه.


  • LTRIM(str) يُرجع السلسلة النصية مع إزالة جميع المسافات البادئة. تعد وظيفة السلسلة هذه ملائمة لعرض المعلومات بشكل صحيح في الحالات التي يُسمح فيها بمسافات عشوائية عند إدخال البيانات:

    حدد LTRIM(city) من البائعين؛


  • RTRIM(str) يُرجع السلسلة النصية مع إزالة جميع المسافات الزائدة:

    حدد RTRIM(city) من البائعين؛

    في حالتنا هذه مساحات اضافيةلم يكن الأمر كذلك، لذلك لن نرى النتيجة ظاهريًا.


  • TRIM(str) يُرجع السلسلة النصية مع إزالة جميع المسافات البادئة والزائدة:

    حدد TRIM(city) من البائعين؛


  • LOWER(str) يُرجع السلسلة النصية مع تحويل جميع الأحرف إلى أحرف صغيرة. إنه لا يعمل بشكل صحيح مع الحروف الروسية، لذا من الأفضل عدم استخدامه. على سبيل المثال، لنطبق هذه الوظيفة على عمود المدينة:

    اختر مدينة، أقل (مدينة) من البائعين؛


    انظر أي نوع من الهراء اتضح أنه. لكن كل شيء على ما يرام مع الأبجدية اللاتينية:

    حدد أقل("المدينة");



  • UPPER(str) يُرجع السلسلة النصية مع تحويل كافة الأحرف إلى أحرف كبيرة. ومن الأفضل أيضًا عدم استخدامه مع الحروف الروسية. لكن كل شيء على ما يرام مع الأبجدية اللاتينية:

    حدد العلوي (البريد الإلكتروني) من العملاء؛



  • LENGTH(str) يُرجع طول السلسلة النصية. على سبيل المثال، دعنا نتعرف على عدد الأحرف الموجودة في عناوين الموردين لدينا:

    حدد العنوان، الطول (العنوان) من البائعين؛



  • LEFT(str, len) يُرجع أحرف len اليسرى من السلسلة النصية. على سبيل المثال، دع الأحرف الثلاثة الأولى فقط تظهر في المدن الموردة:

    حدد الاسم، LEFT(city, 3) من البائعين؛



  • RIGHT(str, len) يُرجع أحرف len الصحيحة من السلسلة النصية. على سبيل المثال، اسمح فقط بعرض الأحرف الثلاثة الأخيرة في المدن الموردة: SELECT LOAD_FILE("C:/proverka");
    يرجى ملاحظة أنه يجب عليك تحديد المسار المطلق للملف.

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