SQLite دوال السلاسل النصية: الاستبدال، والتقسيم الفرعي، والتقليم، والطول

⚡ ملخص ذكي

SQLite تقوم دوال السلاسل النصية مثل LENGTH وSUBSTR وREPLACE وTRIM بمعالجة النصوص مباشرةً داخل الاستعلامات، بينما تعمل دوال المساعدة الرقمية مثل ABS وROUND، بالإضافة إلى دوال المساعدة الخاصة بنوع البيانات والإصدار، على توسيع نطاق ما تقوم به دوال المساعدة الرقمية مثل ABS وROUND، بالإضافة إلى دوال المساعدة الخاصة بنوع البيانات والإصدار. SQLite تؤدي المكتبة وظيفتها.

  • 📏 الطول: تقوم دالة LENGTH بحساب عدد الأحرف التي تحتويها السلسلة، وتعيد قيمة فارغة (null) عندما تكون القيمة التي تم تمريرها فارغة (null).
  • 🔠 تحويل حالة الأحرف: تقوم UPPER و LOWER بتحويل سلسلة نصية إلى أحرف كبيرة أو صغيرة، مع ترك الأرقام والقيم الفارغة دون تغيير.
  • ✂️ السلاسل الفرعية: SUBSTR extracيقوم REPLACE باستبدال كل ظهور لسلسلة فرعية بأخرى من موضع محدد.
  • 🧮 مساعدون رقميون: تقوم الدالة ABS بإرجاع قيمة بدون إشارتها، وتقوم الدالة ROUND بتقصير العدد العشري إلى الأرقام التي تطلبها.
  • 🔍 التفتيش: يُبلغ TYPEOF عن نوع بيانات التعبير، بينما يُرجع LAST_INSERT_ROWID معرف الصف الأخير الذي تم إدراجه.
  • 🤖 مساعدة الذكاء الاصطناعي: GitHub Copilot وأدوات الذكاء الاصطناعي لتحويل النصوص إلى SQL SQLite استعلامات الوظائف، بينما تقوم وظائف C المخصصة بتوسيع المكتبة المدمجة.

SQLite وظائف السلسلة

كيفيه التنصيب SQLite وتشغيل استعلامات وظائف السلاسل النصية

SQLite بشكل افتراضي مزود بقائمة من الوظائف المضمنة داخل SQLite مكتبة. يمكنك أيضًا إضافة بعض الوظائف المخصصة الأخرى باستخدام لغة C لتوسيع الوظائف الأساسية.

لاحظ أنه بالنسبة لجميع الأمثلة التالية، يجب عليك تشغيل sqlite3.exe وفتح اتصال بقاعدة البيانات النموذجية كما يلي:

الخطوة 1) في هذه الخطوة، افتح جهاز الكمبيوتر الخاص بي وانتقل إلى الدليل التالي "C:\sqlite" ثم افتح "sqlite3.exe":

SQLite وظائف السلسلة

الخطوة 2) افتح قاعدة البيانات "TutorialsSampleDB.db" باستخدام الأمر التالي:

SQLite وظائف السلسلة

أنت الآن جاهز لتشغيل أي سؤال وحاول استخدام أي استعلامات مستخدمة في الأقسام التالية.

العثور على طول سلسلة في SQLite

للعثور على طول سلسلة استخدم LENGTH(X) حيث X هي قيمة سلسلة. إذا كانت X قيمة فارغة، فستُرجع دالة الطول قيمة فارغة.

يمكنك أيضًا استخدام دالة الطول مع القيم الرقمية للحصول على طول القيمة الرقمية.

على سبيل المثال:

في المثال التالي، سنحاول استخدام صيغة دالة LENGTH مع القيم التالية:

SELECT LENGTH('A string'), LENGTH(NULL), LENGTH(20), LENGTH(20.5);

هذا سوف يعطيك:

العثور على طول سلسلة في SQLite

والنتيجة هي كما يلي:

  • LENGTH('A string') يُرجع 8 وهو طول السلسلة "A string".
  • الطول (NULL) يُرجع قيمة فارغة.
  • LENGTH(20) تُرجع 2، لأن 20 عبارة عن طولين.
  • LENGTH(20.5) تعيد 4؛ يتم حساب النقطة العائمة .” كحرف، لذا سيكون لديك أربعة أحرف - الأحرف الثلاثة التي تمثل طول الأرقام. بالإضافة إلى حرف آخر للنقطة العائمة ”..”.

تغيير الحالة مع الوظيفة العلوية والوظيفة السفلية

سيُرجع الدالة UPPER(X) نفس السلسلة x، ولكنها ستمثل جميع أحرف السلسلة بأحرف كبيرة.

سوف يُرجع الدالة LOWER(X) نفس السلسلة x، ولكنها ستمثل جميع أحرف السلسلة بأحرف صغيرة.

تقوم الدالتان UPPER وLOWER بإرجاع قيم فارغة إذا قمت بتمرير قيمة فارغة إليهما.

إذا قمت بتمرير قيم رقمية إلى UPPER أو LOWER، فسيُرجع كلاهما القيمة الرقمية الدقيقة.

على سبيل المثال:

SELECT UPPER('a string'), LOWER('A STRING'), UPPER(20), LOWER(20), UPPER(NULL), LOWER(NULL);

هذا سوف يعطيك:

مثال على الوظائف العلوية والسفلية في SQLite

والنتيجة هي كما يلي:

  • UPPER('a string') تُرجع السلسلة "a string" بأحرف كبيرة "A STRING".
  • تقوم الدالة LOWER('A STRING') بإرجاع السلسلة "A STRING" بأحرف صغيرة "a string".
  • UPPER(20)، LOWER(20) يعيد نفس الرقم، حيث لا يوجد لهما أي تأثير على الأرقام.
  • UPPER(NULL)، LOWER(NULL) تُرجع قيمة فارغة لأننا مررنا لها قيمة فارغة.

SQLite وظيفة سوبستر

تُعيد الدالة SUBSTR عددًا محددًا من أجزاء السلسلة النصية، بدءًا من موضع محدد. يمكنك تمرير ثلاثة معاملات إلى الدالة، كما يلي: "SUBSTR(X,Y,Z)"

  • X هو السلسلة الحرفية أو عمود السلسلة المطلوب تحليله. يمكنك تمرير قيمة حرفية (قيمة ثابتة) أو اسم عمود، وفي هذه الحالة سيتم قراءة القيمة من قيم العمود.
  • يمثل Y موضع البداية لـtract السلسلة التي تبدأ منها.
  • Z هو عدد الأحرف المطلوب تحليلها بدءًا من الموضع المحدد Y. هذا الرقم اختياري يمكنك تجاهله، وفي هذه الحالة، SQLite سوفtract السلسلة بدءًا من الموضع Y تخبر بنهاية السلسلة.

على سبيل المثال:

في الاستعلام التالي، سوف نستخدم الدالة SUBSTR للحصول على 4 أحرف بدءًا من الحرف الثاني من أسماء الطلاب:

SELECT StudentName, SUBSTR(StudentName, 2, 4), SUBSTR(StudentName, 2)
FROM Students;

هذا سوف يعطيك:

مثال على وظيفة SUBSTR في SQLite

  • تقوم الدالة SUBSTR(StudentName, 2, 4) باستخراج جزء من السلسلة "StudentName" بدءًا من الحرف الثاني، وإرجاع الأحرف الأربعة التالية.
  • لكن في الدالة SUBSTR(StudentName, 2) لم نحدد عدد الأحرف المراد إرجاعها، ولهذا السبب SQLite أعاد جميع الأحرف المتبقية في "اسم الطالب" بدءًا من الموضع الثاني.

تغيير أجزاء من سلسلة مع SQLite وظيفة الاستبدال

يتم استخدام REPLACE لاستبدال كل سلسلة حدثت في سلسلة أخرى بسلسلة.

استبدال (X، Y، Z) – X هي سلسلة الإدخال الحرفية أو العمود. Y هي السلسلة التي سيتم استبدالها بالسلسلة Z. لاحظ أنها ستستبدل أي تكرار للسلسلة Y بـ Z، وليس واحدًا فقط.

على سبيل المثال:

في الاستعلام التالي، سنستبدل جميع حالات ظهور السلسلة "xx" بالسلسلة "SQLite"

SELECT REPLACE('xx is very lightweight, xx is easy to learn', 'xx', 'SQLite');

هذا سوف يعطيك

مثال على وظيفة REPLACE في SQLite

  • استبدلت دالة الاستبدال جميع السلاسل النصية "xx" بالسلسلة النصية "SQLite".
  • إذن ستكون النتيجة "SQLite خفيف الوزن للغاية، SQLite من السهل التعلم ".

تقليم المساحات الفارغة مع SQLite وظيفة TRIM

يقوم TRIM بإزالة المسافات الفارغة من بداية السلسلة أو من نهايتها. لن يتم إزالة أي مسافات في منتصف السلسلة، فقط من البداية أو من النهاية.

على سبيل المثال:

في الاستعلام التالي، سوف نستخدم الدالة TRIM لإزالة المسافات الفارغة من بداية ونهاية السلسلة.

لاحظ أن عامل التجميع "||" يستخدم لإضافة علامة ";" إضافية إلى نهاية السلسلة. لإظهار أنه تم إزالة المسافات الفارغة في النافذة السوداء.

SELECT TRIM('      SQLite is easy to learn        ') || ';';

هذا سوف يعطيك:

مثال على وظيفة TRIM في SQLite

لاحظ كيف تمت إزالة المسافات الفارغة من بداية السلسلة ومن نهايتها، وتم استبدالها بـ ' ؛ ' في نهايةالمطاف.

قراءة القيم المطلقة مع SQLite وظيفة ABS

تعيد دالة ABS القيمة المطلقة لقيمة عددية. القيمة المطلقة هي القيمة العددية بدون أي إشارة موجبة أو سالبة. تعيد دالة ABS(X) قيمة بناءً على قيمة X على النحو التالي:

  • القيمة المطلقة لـ X إذا كانت X قيمة رقمية.
  • قيمة فارغة إذا كانت X قيمة فارغة.
  • القيمة "0.0" إذا كانت X عبارة عن سلسلة.

على سبيل المثال:

في الاستعلام التالي، سنحاول الحصول على القيمة المطلقة لسلسلة ورقم وقيمة فارغة باستخدام الدالة ABS:

SELECT ABS(-2), ABS(+2), ABS('a string'), ABS(null);

هذا سوف يعطيك:

مثال على وظيفة ABS في SQLite

وكانت النتائج على النحو التالي:

  • ABS(-2)، ABS(+2) يُرجع 2، لأن 2 هي القيمة المطلقة لكل من "-2" و"+2".
  • تقوم ABS('a string') بإرجاع "0.0" لأنك قمت بتمرير قيمة سلسلة وليست قيمة رقمية.
  • تقوم الدالة ABS(null) بإرجاع قيمة فارغة لأنك قمت بتمرير قيمة فارغة لها.

تقريب القيم باستخدام وظيفة ROUND في SQLite

الأرقام العشرية هي أرقام تحتوي على فاصلة عائمة .”، على سبيل المثال، “20.5”، “8.65”. الجزء الموجود على يسار الفاصلة العائمة يسمى الجزء الصحيح، والجزء الموجود على يمين الفاصلة العائمة يسمى الجزء العشري.

الأعداد الصحيحة هي تلك الأعداد التي لا تحتوي على أي فاصلة عائمة. على سبيل المثال، "20"، "8".

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

على سبيل المثال:

في الاستعلام التالي سنحاول استخدام الدالة ROUND مع خيارات مختلفة:

SELECT ROUND(12.4354354), ROUND(12.4354354, 2), ROUND(NULL), ROUND('a string');

هذا سوف يعطيك:

مثال على وظيفة ROUND في SQLite

النتيجة كما يلي:

  • ROUND(12.4354354) – تُرجع القيمة "12"، لأنك لم تحدد عدد الأرقام. لذا، SQLite إزالة كل الجزء العشري.
  • ROUND(12.4354354, 2) - تُرجع القيمة "12.44"، لأنك حددت رقمين فقط لتقريبهما، وهما الرقمان الموجودان على يمين العلامة العشرية.
  • ROUND(NULL) – تُرجع قيمة فارغة لأنك قمت بتمرير قيمة فارغة إليها.
  • ROUND('a string') - تُرجع القيمة "0.0" لأنك قمت بتمرير قيمة سلسلة إليها.

العثور على نوع البيانات من التعبير باستخدام وظيفة TYPEOF

إذا كنت تريد معرفة نوع العمود أو القيمة الحرفية، فيمكنك استخدام الدالة TYPEOF للقيام بذلك.

ترجع الدالة TYPEOF(X) من اسمها نوع بيانات التعبير X. وتقوم بإرجاع قيمة سلسلة تشير إلى نوع بيانات X. وتقوم بإرجاع القيمة بناءً على أنواع البيانات، سواء كانت قيمة "NULL"، حقيقي، نص، عدد صحيح، ...، الخ.

على سبيل المثال:

في الاستعلام التالي سنحاول استخدام الدالة TYPEOF مع أنواع مختلفة من القيم الحرفية:

SELECT TYPEOF(null), TYPEOF(12), TYPEOF(12.5), TYPEOF('a string');

هذا سوف يعطيك:

مثال على وظيفة TYPEOF في SQLite

النتائج التي تم إرجاعها هي كما يلي:

  • TYPEOF(null) – تُرجع قيمة فارغة لأنك قمت بتمرير قيمة فارغة إليها.
  • TYPEOF(12) – إرجاع عدد صحيح حيث أن 12 هو عدد صحيح.
  • TYPEOF(12.5) – تُرجع REAL لأن 12.5 هو رقم حقيقي.
  • TYPEOF('a string') - يُرجع النص باعتباره "سلسلة" نصًا.

البحث عن آخر سجل تم إدراجه باستخدام SQLite LAST_INSERT_ROWID

SQLite يعين مفتاح عدد صحيح (معرف) لجميع الصفوف في جميع الجداول. يتم استخدام هذا الرقم لتعريف هذه الصفوف بشكل فريد.

عندما تقوم بإدراج صف جديد في الجدول، SQLite سوف يعين Rowid قيمة فريدة.

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

تعيد الدالة LAST_INSERT_ROWID() معرف ROW_ID للصف الأخير الذي تم إدراجه في أي جدول في قاعدة البيانات. لاحظ أنها لا تأخذ أي متغير.

على سبيل المثال:

في المثال التالي سوف نقوم بتشغيل الدالة LAST_INSERT_ROWID() على النحو التالي:

SELECT LAST_INSERT_ROWID();

هذا سوف يعطيك:

مثال على وظيفة LAST_INSERT_ROWID في SQLite

LAST_INSERT_ROWID() يُرجع 0 لأنه لا توجد صفوف مدرجة في أي جداول في اتصال قاعدة البيانات الحالي.

الآن، لنقم بإدراج طالب جديد وتشغيل الدالة LAST_INSERT_ROWID() مرة أخرى بعد عبارة الإدراج، كما يلي:

INSERT INTO Students VALUES(11, 'guru', 1, '1998-10-12');
SELECT LAST_INSERT_ROWID();

هذا سوف يعطيك:

مثال على وظيفة LAST_INSERT_ROWID في SQLite

بعد أن قمنا بإدراج طالب جديد بالمعرف 11، ستعيد الدالة LAST_INSERT_ROWID() آخر معرف صف تم إدراجه وهو 11.

الحصول على النسخة الخاصة بك SQLite مكتبة

للحصول على النسخة الخاصة بك SQLite المكتبة، يجب عليك استدعاء الدالة SQLITE_VERSION().

على سبيل المثال:

دعونا معرفة ما هو إصدار SQLite نحن نستخدم ذلك عن طريق تشغيل الأمر التالي:

SELECT SQLITE_VERSION();

هذا سوف يعطيك:

مثال للحصول على إصدارك SQLite مكتبة

تعيد SQLITE_VERSION() الإصدار 3.9.2 وهو إصدار SQLite نحن نستخدم.

إنشاء وظائف محددة من قبل المستخدم وتجميع الوظائف المحددة من قبل المستخدم

بالنسبة لبعض المستخدمين، SQLite الوظائف الأساسية محدودة. قد يحتاجون إلى إضافة وظائف مخصصة لاحتياجاتهم المخصصة.

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

ومع ذلك، يمكنك إنشاء دالة باستخدام لغات برمجة مثل C#أو لغة C أو PHP أو C++ وتعلق تلك الوظيفة مع النواة SQLite وظائف في SQLite يمكنك استخدام المكتبة نفسها، باستخدام الدالة "sqlite3_create_function". ثم يمكنك إعادة استخدامها في قاعدة بياناتك.

على سبيل المثال:

في المثال التالي، سنقوم بإنشاء دالة معرفة من قبل المستخدم باستخدام لغة البرمجة C# وإضافتها إلى SQLite المهام:

[SQLiteFunction(Name = "DoubleValue", Arguments = 1, FuncType = FunctionType.Scalar)]
public class DoubleValue: SQLiteFunction
{
    public override object Invoke(object[] args)
    {
        return args[0] * 2;
    }
}

تتم كتابة مقتطف التعليمات البرمجية هذا في لغة البرمجة C #; يقوم بإنشاء دالة C# باستخدام رمز C#.

اسم الوظيفة سيكون "Doubleتأخذ الدالة "Value" مُعاملًا واحدًا وتعيد قيمته مضروبة في 2.

لاحظ أن C# يضيف هذه الوظيفة تلقائيًا إلى SQLite. كل ما تحتاجه هو تجميع وتشغيل هذا الرمز. ثم ستضيف C# تلك الوظيفة التي تحمل الاسم نفسه إلى قائمة SQLite المهام. ثم يمكنك استخدام هذه الوظيفة في SQLite.

بنفس الطريقة باستخدام لغات البرمجة مثل C#، C، PHP، أو C++، يمكنك أيضًا إنشاء وظائف مجمعة محددة من قبل المستخدم. والتي تستخدم لتوسيع الوظائف المجمعة في SQLite واستخدامها لإنشاء وظائف مجمعة مخصصة.

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

تُنفَّذ الدوال العددية مثل LENGTH وUPPER وROUND مرة واحدة لكل صف، وتُرجع قيمة واحدة لكل منها. أما الدوال التجميعية مثل COUNT وSUM وGROUP_CONCAT، فتُعالج عدة صفوف معًا، وتُرجع نتيجة واحدة مُجمَّعة للمجموعة بأكملها.

SQLite يقوم بدمج السلاسل النصية باستخدام عامل التشغيل ||، على سبيل المثال 'a' || 'b'. كما تضيف الإصدارات الأحدث الدالتين concat() و concat_ws()، بينما تقوم الدالة group_concat() بدمج القيم من عدة صفوف في سلسلة نصية واحدة محددة.

نعم. SQLite توفر هذه الدوال DATE وTIME وDATETIME وJULIANDAY وSTRFTIME. تقوم هذه الدوال بتنسيق وحساب التواريخ من النصوص أو الطوابع الزمنية لنظام يونكس أو القيمة الخاصة 'now'، حيث SQLite يخزن التواريخ كنصوص أو أعداد حقيقية أو أعداد صحيحة بدلاً من نوع مخصص.

بشكل افتراضي، يقوم مفتاحا UPPER وLOWER بتغيير الأحرف ASCII من A إلى Z فقط، لذا تبقى الأحرف المُشكّلة أو غير اللاتينية دون تغيير. يتطلب التحويل الكامل لحالة الأحرف في Unicode تضمين امتداد ICU. SQLiteوالتي لا تتضمنها سوى عدد قليل من الإصدارات الافتراضية.

استخدم الدالة INSTR(X, Y) التي تُعيد موضع أول سلسلة فرعية Y داخل السلسلة X، بدءًا من 1. تُعيد الدالة 0 في حال عدم وجود السلسلة الفرعية. استخدم الدالة INSTR مع الدالة SUBSTR للحصول على مثال.tracنص t بعد الحرف المطابق.

قم بتغليف التعبير باستخدام IFNULL(X, fallback) أو COALESCE(X, fallback) لاستبدال القيمة الافتراضية عندما تُرجع الدالة قيمة فارغة (null). تقبل دالة COALESCE عدة وسائط وتُرجع أول قيمة غير فارغة، مما يُفيد في حال وجود العديد من الأعمدة الفارغة.

نعم. مساعد الطيار جيثب يقترح استدعاءات LENGTH وSUBSTR وREPLACE وROUND من تعليق أو اسم جدول، ويكتب شيفرة الدوال المعرفة من قبل المستخدم بلغة C أو C#. اختبر مخرجاته دائمًا مقابل مخططك، لأنه قد يُنشئ أسماء أعمدة جديدة.

نعم. تقوم برامج المساعدة التي تعمل بتقنية الذكاء الاصطناعي لتحويل النصوص إلى لغة SQL بتحويل الطلبات المكتوبة بلغة بسيطة إلى SQLite الاستعلامات التي تستخدم دوال السلاسل النصية مثل TRIM وREPLACE. تُسرّع هذه الاستعلامات عملية البرمجة الأولية.pingومع ذلك، يجب عليك التحقق من استعلام SQL المُنشأ مقابل بياناتك، لأن نماذج التعلم الآلي تنتج أحيانًا منطقًا غير دقيق.

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