SQLite وظائف السلسلة: استبدال، SUBSTR، TRIM، ROUND

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

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

الخطوة 1) في هذه الخطوة،

  1. افتح جهاز الكمبيوتر وانتقل إلى الدليل التالي "ج:\sqlite" وثم
  2. يفتح "sqlite3.exe"

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

الخطوة 2) افتح قاعدة البيانات "البرامج التعليميةSampleDB.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') يُرجع السلسلة "سلسلة"في تمثيل الحرف الكبير"سلسلة".
  • LOWER('A STRING') يُرجع السلسلة "سلسلة"" في تمثيل الحروف الصغيرة ""سلسلة".
  • UPPER(20)، LOWER(20) يعيد نفس الرقم، حيث لا يوجد لهما أي تأثير على الأرقام.
  • UPPER(NULL)، LOWER(NULL) تُرجع قيمة فارغة لأننا مررنا لها قيمة فارغة.

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

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

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

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

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

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

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

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

  • SUBSTR(اسم الطالب، 2، 4) سلسلة فرعية "أسم الطالب"بدءًا من الحرف الثاني، وإرجاع الأحرف الأربعة التالية.
  • ومع ذلك، في الوظيفة SUBSTR(اسم الطالب، 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_إنشاء_دالة" وظيفة. ثم يمكنك إعادة استخدامها في قاعدة البيانات الخاصة بك.

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

في المثال التالي سوف نقوم بإنشاء دالة محددة للمستخدم باستخدام 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بعد التخفيض"يأخذ معلمة واحدة ويعيد قيمتها مضروبة في 2.

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

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

الملخص

  • SQLite يوفر مجموعة شاملة من الوظائف المضمنة التي تجعل العمل مع جداول وأعمدة قاعدة البيانات أمرًا سهلاً كما رأينا. يمكنك استخدام هذه الوظائف مع الأعمدة بالإضافة إلى القيم الحرفية ضمن أي تعبير في استعلامات SQL الخاصة بك.
  • يمكنك أيضًا استخدام دالة الطول مع القيم الرقمية للحصول على طول القيمة الرقمية.
  • تقوم الدالتان UPPER وLOWER بإرجاع قيم فارغة إذا قمت بتمرير قيمة فارغة إليهما.
  • تقوم الدالة SUBSTR بإرجاع عدد محدد من السلاسل، بدءًا من موضع محدد.
  • يتم استخدام REPLACE لاستبدال كل سلسلة حدثت في سلسلة أخرى بسلسلة.
  • يقوم TRIM بإزالة المسافات الفارغة من بداية السلسلة أو من نهايتها.
  • ترجع الدالة ABS القيمة المطلقة لقيمة رقمية.
  • يقوم ROUND(X) بتحويل القيم العشرية أو الأعمدة X إلى أرقام صحيحة فقط.
  • ترجع الدالة TYPEOF(X)، من اسمها، نوع بيانات التعبير X.
  • تقوم الدالة LAST_INSERT_ROWID() بإرجاع ROW_ID لآخر صف تم إدراجه في أي جدول في قاعدة البيانات.