جهات الاتصال

Sql إضافة أحرف إلى بداية السطر. وظائف سلسلة SQL - أمثلة على الاستخدام. الدوال الرمزية في لغة SQL

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

حدد اسم || اللقب AS FIO من الجدول

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

حدد اسم || "" || اللقب AS FIO من الجدول

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

دالة INITCAP

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

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

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

الدالة UPPER

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

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

  • الاسم - اسم العمود ؛
  • 20 - عدد الشخصيات ( طول المجال);
  • "-" هي حرف يتم تبطينه بعدد الأحرف المطلوب.

وظيفة RPAD

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

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

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

وظيفة LTRIM

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

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

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

وظيفة RTRIM

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

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

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

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

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

وسيكون لديك بديل للرموز.

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

وظيفة TRANSLATE

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

دالة SUBSTR

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

حدد SUBSTR (ident، "4"، "8") من الجدول

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

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

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

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

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

4
6
7

نحن هنا معك ونفحص وظائف سلسلة SQL الأساسية. سنواصل استكشافنا لـ SQL في المقالات المستقبلية.

وظائف سلسلة SQL

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

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


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

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


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

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

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


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

    حدد إدراج (العنوان ، 1 ، 3 ، "") من البائعين ؛


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


  • LPAD (str، len، dop_str) تعيد السلسلة str، مبطن لليسار بواسطة dop_str إلى length len. لنفترض أننا نريد أن تكون مدن الموردين على اليمين عند عرض مدن الموردين ونملأ المساحة الفارغة بالنقاط:

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



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

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


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


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

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


  • RTRIM (str) تعيد سلسلة السلسلة مع إزالة جميع المسافات اللاحقة:

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

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


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

    حدد الهيكل (المدينة) من البائعين ؛


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

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


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

    حدد LOWER ("CITY") ؛



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

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



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

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



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

    حدد الاسم ، يسار (مدينة ، 3) من البائعين ؛



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

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

آحرون. يحتوي على النحو التالي:

CONV (رقم ، N ، M)

جدال عددفي الأساس N. تقوم الدالة بتحويلها إلى القاعدة M وإرجاع القيمة كسلسلة.

مثال 1

يحول الاستعلام التالي الرقم العشري 2 إلى رقم ثنائي:

حدد CONV (2،10،2) ؛

المركز: 10

لتحويل الرقم 2E من رقم سداسي عشري إلى رقم عشري ، يلزم الاستعلام التالي:

حدد CONV ("2E" ، 16.10) ؛

المركز: 46

دور CHAR ()يترجم كود ASCII إلى سلاسل. يحتوي على النحو التالي:

CHAR (n1، n2، n3 ..)

مثال 2

حدد CHAR (83.81.76) ،

النتيجة: SQL

ترجع الدالات التالية طول السلسلة:

  • الطول (سلسلة) ؛
  • OCTET_LENGTH (سلسلة نصية) ،
  • CHAR_LENGTH (سلسلة نصية) ،
  • CHARACTER_LENGTH (سلسلة نصية).

مثال 3

حدد الطول ("MySQL") ؛

النتيجة: 5

وظيفة مفيدة في بعض الأحيان BIT_LENGTH (سلسلة نصية)التي تُرجع طول السلسلة بالبتات.

مثال 4

حدد BIT_LENGTH ("MySQL") ؛

المركز: 40

وظائف للعمل مع السلاسل الفرعية

عادةً ما يُشار إلى السلسلة الفرعية على أنها جزء من سلسلة. غالبًا ما يكون مطلوبًا لمعرفة موضع التواجد الأول لسلسلة فرعية في سلسلة. ثلاث وظائف تحل هذه المشكلة في MySQL:

  • موقع (سلسلة فرعية ، سلسلة [، موضع]) ؛
  • POSITION (سلسلة فرعية ، سلسلة) ؛
  • INSTR (سلسلة ، سلسلة فرعية).

إذا لم يتم تضمين السلسلة الفرعية في السلسلة ، فإن جميع الدالات الثلاث ترجع القيمة 0. تختلف الدالة INSTR () عن الاثنتين الأخريين في ترتيب الوسيطات الخاصة بها. يمكن أن تحتوي الدالة LOCATE () على وسيطة ثالثة وضع، والذي يسمح لك بالبحث عن سلسلة فرعية في سلسلة ليس من البداية ، ولكن من موضع محدد.

مثال 5

حدد الموقع ("توباز" ، "شركة المساهمة المفتوحة توباز") ؛

المركز: 31

حدد الموقف ("توباز" ، "شركة المساهمة المفتوحة توباز") ؛

المركز: 31

SELECT INSTR ("شركة مساهمة مفتوحة توباز" ، "توباز") ؛

المركز: 31

حدد الموقع ("Topaz" ، "Topaz Plant and Topaz LLC" ، 9) ؛

المركز: 20

حدد الموقع ("ألماز" ، "شركة المساهمة المفتوحة توباز") ؛

النتيجة: 0

المهام LEFT (سلسلة ، N)و يمين (سلسلة ، N)إرجاع أحرف N في أقصى اليسار وأقصى اليمين في السلسلة ، على التوالي.

مثال 6

حدد اليسار ("MySQL DBMS" ، 4) ؛

النتيجة: نظم إدارة قواعد البيانات

حدد RIGHT ("MySQL DBMS" ، 5) ؛

النتيجة: MySQL

قد ترغب أحيانًا في الحصول على سلسلة فرعية تبدأ في موضع معين. لهذا ، يتم استخدام الوظائف التالية:

  • SUBSTRING (سلسلة ، موضع ، N) ؛
  • MID (سلسلة ، موضع ، N).

كلتا الدالتين ترجع عدد N من الأحرف من السلسلة المحددة ، بدءًا من الموضع المحدد.

مثال 7

SELECT SUBSTRING ("MySQL DBMS هي واحدة من أكثر نظم إدارة قواعد البيانات شيوعًا" ، 6،5) ؛

النتيجة: MySQL

عند العمل مع عناوين البريد الإلكتروني وعناوين مواقع الويب ، تكون الوظيفة مفيدة للغاية SUBSTR_INDEX ()... للدالة ثلاث حجج:

SUBSTR_INDEX (سلسلة ، محدد ، N).

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

المثال 8

حدد SUBSTRING_INDEX ("www.mysql.ru"، "."، 2) ؛

النتيجة: www.mysql

حدد SUBSTRING_INDEX ("www.mysql.ru"، "."، - 2) ؛

النتيجة: mysql.ru

دور REPLACE (سلسلة ، سلسلة فرعية 1 ، سلسلة فرعية 2)يسمح لك باستبدال جميع تكرارات substring1 في سلسلة مع substring2.

توفر وظائف ومشغلات السلسلة الأساسية مجموعة متنوعة من الخيارات وتعيد قيمة سلسلة كنتيجة. بعض دوال السلسلة تتكون من عنصرين ، مما يعني أنها يمكن أن تعمل على سلسلتين في نفس الوقت. يدعم معيار SQL 2003 وظائف السلسلة.

مشغل سلسلة

يعرّف SQL 2003 عامل التشغيل التسلسلي (||) الذي يربط سلسلتين منفصلتين في قيمة سلسلة واحدة.

منصة DB2

تدعم منصة DB2 مشغل سلسلة SQL 2003 ومرادفه ، وظيفة CONCAT.

منصة MySQL

تدعم منصة MySQL وظيفة CONCATQ ، وهي مرادف لمشغل سلسلة SQL 2003.

Oracle و PostgreSQL

تدعم الأنظمة الأساسية PostgreSQL و Oracle مشغل تسلسل الشريط العمودي المزدوج SQL 2003.

منصة SQL Server

يستخدم النظام الأساسي لـ SQL Server علامة الجمع (+) كمرادف لعامل تشغيل SQL 2003. يوفر SQL Server معلمة النظام CONCAT_NULL_YIELDS_NULL التي تتحكم في سلوك النظام عند مواجهة القيم الفارغة عند ربط قيم السلسلة.

/ * بناء جملة SQL 2003 * /

سلسلة || سلسلة 2 || سلسلة 3

سلسلة 1string2string3

/ * بالنسبة إلى MySQL * /

CONCAT ("سلسلة نصية"، "سلسلة 2")

إذا كانت أي من القيم المتسلسلة فارغة ، فسيتم إرجاع سلسلة فارغة. بالإضافة إلى ذلك ، إذا كانت هناك قيمة رقمية متضمنة في التسلسل ، فسيتم تحويلها ضمنيًا إلى سلسلة.

حدد CONCAT ("My" ، "bologna" ، "has" ، "a" ، "first" ، "name ...") ؛

بولونيا بلدي له الاسم الأول

حدد CONCAT ("My"، NULL، "has"، "first"، "name ...") ؛

التحويل والترجمة

تعمل الدالة CONVERT على تغيير عرض سلسلة الأحرف ضمن مجموعة الأحرف والترتيب. على سبيل المثال ، يمكن استخدام دالة CONVERT لتغيير عدد وحدات البت لكل حرف.

تترجم الدالة TRANSLATE قيمة سلسلة من مجموعة أحرف إلى أخرى. على سبيل المثال ، يمكن استخدام الدالة TRANSLATE لتحويل قيمة من مجموعة الأحرف الإنجليزية إلى مجموعة أحرف Kanji (اليابانية) أو السيريلية (الروسية). يجب أن تكون الترجمة نفسها موجودة بالفعل - إما الترجمة الافتراضية أو التي تم إنشاؤها باستخدام الأمر CREATE TRANSLATION.

بناء جملة SQL 2003

CONVERT (char_value USING character_conversion_name)

TRANSLATE (char_value USING translation_name)

تقوم الدالة CONVERT بتحويل قيمة الحرف إلى مجموعة الأحرف بالاسم المحدد في معلمة character_conversion_name. تقوم الدالة TRANSLATE بتحويل قيمة الحرف إلى مجموعة الأحرف المحددة في اسم_الترجمة.

من بين الأنظمة الأساسية التي تم النظر فيها ، تدعم Oracle فقط وظائف CONVERT و TRANSLATE كما هو محدد في معيار SQL 2003. وظيفة Oracle's TRANSLATE مشابهة جدًا ، ولكنها ليست متطابقة ، مع SQL 2003. في هذا التنفيذ ، تأخذ الوظيفة وسيطتين فقط وتترجم فقط بين مجموعة أحرف قاعدة البيانات ومجموعة أحرف دعم اللغة الوطنية.

يؤدي تطبيق MySQL لوظيفة CONV إلى تحويل الأرقام من قاعدة إلى أخرى فقط. ولكن في SQL Server ، يكون تنفيذ وظيفة CONVERT غنيًا جدًا بالميزات ويغير نوع البيانات للتعبير ، ولكنه يختلف في جميع الجوانب الأخرى عن وظيفة CONVERT لمعيار SQL 2003. لا تدعم منصة PostgreSQL أداة CONVERT دالة ، ويؤدي تنفيذ الدالة TRANSLATE إلى تحويل كافة تكرارات سلسلة الأحرف إلى أي سلسلة أحرف أخرى.

ديسيبل

لا تدعم منصة DB2 وظيفة CONVERT ، كما أن دعم وظيفة الترجمة غير متوافق مع ANSI. تُستخدم الدالة TRANSLATE لتحويل السلاسل الفرعية وهي مرادف تاريخيًا للدالة UPPER لأن الدالة UPPER تمت إضافتها مؤخرًا إلى DB2. إذا تم استخدام الدالة TRANSLATE في DB2 مع وسيطة تعبير ذات حرف واحد ، فإن النتيجة هي نفس السلسلة المحولة إلى أحرف كبيرة. إذا تم استخدام الوظيفة مع عدة وسيطات ، على سبيل المثال TRANSLATE (ucmo4HUK ، استبدال ، تطابق) ، فإن الوظيفة تحول جميع الأحرف الموجودة في المصدر الموجودة أيضًا في معلمة المطابقة. سيتم استبدال كل حرف في المصدر في نفس موضع معلمة المطابقة بالحرف من معلمة الاستبدال. أدناه مثال.

ترجمة ("مرحبًا ، أيها العالم!") "مرحبًا ، العالم!"

ترجمة ("Hello، World1"، "wZ"، "1W") "Hewwo، Zorwd1

MySQL

لا تدعم منصة MySQL وظيفتي TRANSLATE و CONVERT.

وحي

تدعم منصة Oracle البنية التالية لوظائف CONVERT و TRANSLATE.

في تطبيق Oracle ، ترجع الدالة CONVERT نص قيمة الحرف ، محولة إلى مجموعة الأحرف الهدف. Char_value هي السلسلة المراد تحويلها ، و target_character_set هو اسم مجموعة الأحرف لتحويل السلسلة إليها ، و source_character set هي مجموعة الأحرف التي تم تخزين قيمة السلسلة فيها في الأصل.

تتبع وظيفة TRANSLATE في Oracle بناء جملة ANSI ، ولكن يمكنك فقط اختيار واحدة من مجموعتي أحرف: مجموعة أحرف قاعدة البيانات (CHARJCS) ومجموعة أحرف اللغة الوطنية المدعومة (NCHARJZS).

تدعم Oracle أيضًا وظيفة أخرى ، تسمى أيضًا TRANSLATE (بدون استخدام الكلمة الأساسية USING). لا علاقة لوظيفة الترجمة هذه بتحويل مجموعة الأحرف.

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

تدعم Oracle العديد من مجموعات الأحرف الشائعة ، والتي تتضمن مجموعات US7ASCII و WE8DECDEC. WE8HP ، F7DEC ، WE8EBCDIC500 ، WE8PC850u WE8ISO8859PI. على سبيل المثال:

حدد CONVERT ("Gro2"، "US7ASCII"، "WE8HP") من DUAL ؛

PostgreSQL

تدعم منصة PostgreSQL بيان ANSI CONVERT ، ويمكن هنا تحديد التحويلات باستخدام الأمر CREATE CONVERSION. يوفر تطبيق PostgreSQL لوظيفة TRANSLATE مجموعة موسعة من الوظائف التي تسمح لك بتحويل أي نص إلى نص آخر ضمن سلسلة محددة.

ترجمة (سلسلة أحرف ، from_text ، to_text)

وهنا بعض الأمثلة:

حدد الترجمة ("12345abcde"، "5a"، "XX") ؛ "1234XXbcde" حدد الترجمة (العنوان ، "الكمبيوتر" ، "الكمبيوتر") من العناوين WHERE type = "Personal_computer" SELECT CONVERT ("PostgreSQL" باستخدام iso_8859_1_to_utf_8) "PostgreSQL"

خادم قاعدة البيانات

لا يدعم SQL Server الدالة TRANSLATE. لا يتوافق تنفيذ وظيفة CONVERT في SQL Server مع معيار SQL 2003. هذه الوظيفة في SQL Server تكافئ وظيفة CAST.

CONVERT (نوع البيانات [(الطول) | (الدقة ، المقياس)] ، التعبير ، النمط])

يتم استخدام عبارة النمط لتحديد تنسيق تحويل التاريخ. لمزيد من المعلومات ، راجع وثائق SQL Server. أدناه مثال.

حدد العنوان ، CONVERT (char (7) ، ytd_sales) من العناوين ORDER BY title GO

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

لقد قمنا بالفعل بفحص وظائف سلسلة SQL ، ولكن نظرًا لاختلاف تطبيقات هذه اللغة في نظم إدارة قواعد البيانات المختلفة ، على سبيل المثال ، فإن بعض الوظائف ليست في Transact-SQL ، ولكن في PL / PGSql هي كذلك ، وفي المرة الأخيرة التي نظرنا فيها إلى وظائف السلسلة التي يمكن استخدامها في plpgsql ، وبالتالي سنتحدث اليوم بشكل خاص عن Transact-SQL.

كيف يمكن دمج SUBSTRING و CHARINDEX و LEN

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

لهذا سوف نستخدم الوظائف التالية:

  • التضمين(str، start، len) - تقطع هذه الوظيفة جزءًا من سلسلة نصية من سلسلة أخرى. له ثلاث معاملات 1. هذه هي السلسلة نفسها ؛ 2. موضع البداية الذي يبدأ منه القطع ؛ 3. عدد الأحرف ، وكم يجب قطع.
  • شارينديكس(str1، str2) - يبحث عن str1 في str2 ويعيد ترتيبي الحرف الأول إذا تم العثور على مثل هذه السلسلة. يحتوي على معلمة اختيارية ثالثة ، والتي يمكنك من خلالها تحديد الجانب الذي تبدأ منه البحث.
  • لين(str1) هو طول السلسلة ، أي الشخصيات.

كما ترى ، استخدمت هنا إعلان المتغيرات ، ويمكنك استبدال الحقول الخاصة بك في الطلب بدلاً من المتغيرات. هذا هو الكود نفسه:

قم بتعريفrezult كـ varchar (10) - سلسلة أولية تعلن @ str1 على أنها varchar (100) - سلسلة البحث تعلن @ str2 على أنها varchar (10) set @ str1 = "اختبار سلسلة السلسلة للبحث عن سلسلة أخرى فيها" set @ str2 = "string" set @ rezult = سلسلة فرعية (@ str1، CHARINDEX (@ str2، @ str1)، LEN (@ str2)) حددrezult

النقطة هنا هي: نستخدم وظيفة len لمعرفة عدد الأحرف التي يجب قطعها ، وتقوم charindex بتعيين الموضع الذي تبدأ منه القطع ، وبالتالي تؤدي السلسلة الفرعية التحديد نفسه في السلسلة.

كيف يمكن الجمع بين LEFT و RIGHT و LEN

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

  • اليسار(str ، kol) - تقطع الوظيفة عدد الأحرف المحدد من اليسار ، ولها معلمتان ، الأولى عبارة عن سلسلة والثانية ، على التوالي ، عدد الأحرف ؛
  • حق(str، kol) - تقطع الوظيفة عدد الأحرف المحدد من اليمين ، وتكون المعلمات هي نفسها.

الآن سوف نستخدم استعلامات بسيطة مقابل الجدول

أولاً ، لنقم بإنشاء test_table:

إنشاء جدول (IDENTITY (1،1) NOT NULL، (18، 0) NULL، (50) NULL، CONSTRAINT PRIMARY KEY CLUSTERED (ASC) WITH (PAD_INDEX = OFF، STATISTICS_NORECOMPUTE = OFF، IGNORE_DUP_KEY = OFF، ALLOW_ROW_LOCPOWS = OFF، ALLOW_ROW_LOCPOWS = OFF ) ON GO

دعنا نملأها ببيانات الاختبار ونكتب الاستفسارات التالية:

كما تعلم ، فإن الاستعلام الأول هو مجرد مجموعة مختارة من جميع الصفوف (أساسيات SQL - جملة التحديد) ، والثاني عبارة عن مجموعة مباشرة من وظائفنا ، إليك الكود:

حدد * من test_table select number ، يسار (نص ، LEN (رقم)) مثل str من test_table

وإذا كانت هذه الأعداد على اليمين ، فسنستخدم الدالة الصحيح.

باستخدام Rtrim ، Ltrim ، العلوي والسفلي في تركيبة

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

  • رتريم(str) - يزيل المسافات من اليمين ؛
  • لتريم(str) - يزيل المسافات من اليسار ؛
  • العلوي(str) - يحول السلسلة إلى أحرف كبيرة ؛
  • أدنى(str) - يحول السلسلة إلى أحرف صغيرة.

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

قم بتعريف @ str1 على أنه varchar (100) set @ str1 = "سلسلة اختبار مع مسافات بادئة ولاحقة" حدد @ str1 حدد الجزء العلوي (سلسلة فرعية (rtrim (ltrim (@ str1)) ، 1،1)) + سلسلة فرعية (rtrim ( ltrim (@ str1))، 2، LEN (rtrim (ltrim (@ str1))) - 1))

اليوم ، أعتقد أن هذا كافٍ ، وإذا كنت تحب البرمجة في SQL ، فقد تطرقنا في هذا الموقع إلى هذا الموضوع المثير للاهتمام أكثر من مرة ، على سبيل المثال.



هل أعجبك المقال؟ أنشرها