عندما كنت أكتب صفحة اليوم، كنت مكتئبًا جدًا أيضًا. كانت هناك سجلات في الجدول، لكن لم أتمكن من العثور عليها في ASP، وقد حدث ذلك بسبب أحرف البدل المختلفة في عبارات الاستعلام الخاصة بالوصول وSQL .
مقارنة أحرف البدل في ACCESS وأحرف البدل في SQL SERVER
================================================================================================== =
أحرف البدل لمكتبة ACCESS هي:
* يطابق أي عدد من الأحرف
?يطابق أي حرف مكون من حرف واحد
أحرف البدل في SQL Server هي:
% يطابق أي عدد من الأحرف
_ يتطابق مع حرف واحد
نص
عندما كنت أكتب صفحة اليوم، كنت مكتئبًا جدًا أيضًا. كانت هناك سجلات في الجدول، لكن لم أتمكن من العثور عليها في ASP. بيان SQL النظري هو كما يلي:
حدد * من t_food حيث t_food.name مثل '*apple*'
بالبحث في GOOGLE، وجدت أن الاستعلام الغامض في ASP يجب أن يُكتب على النحو التالي:
حدد * من t_food حيث t_food.name مثل '%%apple%%'
يجب أن يكون %، ويجب أن يكون هناك اثنان. يرجى الانتباه.
++++++++++++++++++++++++++++++++++++++++++++ ++ ++++++++++++++++++++++
مشكلة البدل بيان استعلام SQL
عند استخدام عبارات SQL للاستعلام عن البيانات في Access، يتم استخدام حرف البدل * للاستعلام. البيان هو كما يلي:
حدد * من العادي حيث اسم الكتاب مثل "*h*"
حاولت ذلك في عرض SQL الخاص بـ Access دون أي مشاكل، كل شيء يعمل بشكل جيد. لذلك قمت بكتابة عبارة SQL في برنامج C#، ولكن بمجرد الوصول إلى عبارة الاستعلام، حدث خطأ. لذلك بحثت عن ملف تعليمات Access ووجدت المساعدة التالية:
////////////////////////////////////////////////////////////////// /// //////////
يقارن تعبير سلسلة بنمط في تعبير SQL.
قواعد اللغة
التعبير مثل النمط
يتكون بناء جملة عامل Like من الأجزاء التالية:
وصف جزئي
التعبير تعبير SQL المستخدم في جملة Where.
تتم مقارنة النمط الحرفي للسلسلة بالتعبير.
يوضح
يمكنك استخدام عامل التشغيل Like للعثور على قيم الحقول التي تطابق نمطًا محددًا. بالنسبة للنمط، يمكنك تحديد قيمة كاملة (على سبيل المثال، Like Smith)، أو يمكنك استخدام أحرف البدل للعثور على نطاق من القيم (على سبيل المثال، Like Sm*).
في التعبيرات، يمكنك استخدام عامل التشغيل Like لمقارنة قيم الحقول بالسلاسل. على سبيل المثال، إذا قمت بإدخال Like C* في استعلام SQL، فسيقوم الاستعلام بإرجاع جميع قيم الحقول التي تبدأ بالحرف C. في استعلام المعلمات، يمكنك مطالبة المستخدم بكتابة نمط للبحث عنه.
يقوم المثال التالي بإرجاع البيانات التي تبدأ بالحرف P ويتبعها أي حرف من A إلى F وثلاثة أرقام:
مثل P[AF]###
ويبين الجدول التالي كيفية اختبار أنماط مختلفة من التعبيرات من خلال الإعجاب.
نوع المباراة
مطابقة النمط
(الرجوع صحيح) لا يوجد تطابق
(العودة كاذبة)
أحرف متعددة a*a aa، aBa، aBBBa ABC
*أب* اي بي سي، AABB، Xab aZb، باك
شخصية خاصة أ
أأأأأ
أحرف متعددة ab* abcdefg، abc cab، aab
حرف واحد aaa aaa، a3a، aBa aBBBa
الأرقام الفردية a#a a0a، a1a، a2a aaa، a10a
نطاق الأحرف [az] f، p، j 2، &
خارج النطاق [!az] 9, &, % b, a
القيم غير الرقمية [!0-9] A, a, &, ~ 0, 1, 9
القيمة المركبة a[!bm]# An9, az0, a99 abc, aj0
العنوان المرجعي: http://office.microsoft.com/zh-cn/assistance/HP010322532052.aspx
////////////////////////////////////////////////////////////////// /// /////////
المساعدة تقول ذلك، ولا توجد مشاكل ما هي المشكلة؟ إنه يحيرني أكثر. لاحقًا، سألت أحد زملائي وقلت: عبارة SQL الخاصة بك خاطئة يجب أن يكون حرف البدل % بدلاً من *. لكن المساعدة تقول *، وكل شيء يعمل بشكل جيد عندما أقوم باختباره في Access. لا يستطيع زملائي شرح السبب، لذلك يستمرون في البحث عن إجابات لطلبات المساعدة. تم العثور على المعلومات التالية في ملف تعليمات آخر:
////////////////////////////////////////////////////////////////// /// /////////
توفر طرق مطابقة الأنماط المضمنة أداة عامة لمقارنة السلسلة. يعرض الجدول التالي أحرف البدل التي يمكن استخدامها مع عامل التشغيل Like والأرقام والسلاسل التي تطابقها.
الأحرف في النمط تتطابق في التعبير
؟ أو _ (تسطير) أي حرف واحد
* أو % صفر أو أكثر من الأحرف
# أي رقم فردي (0-9)
[charlist] أي حرف واحد في charlist.
[!charlist] أي حرف واحد غير موجود في قائمة charlist.
يمكنك استخدام مجموعة مكونة من حرف واحد أو أكثر (قائمة الأحرف) محاطة بأقواس ([]) لمطابقة أي حرف واحد في التعبير، ويمكن أن تحتوي قائمة الأحرف على معظم الأحرف في مجموعة أحرف ANSI، بما في ذلك الأرقام. يمكن مطابقة أحرف محددة مثل القوس الأيسر ([)، وعلامة الاستفهام (؟)، وعلامة الرقم (#)، والعلامة النجمية (*) مباشرةً مع الرموز نفسها عن طريق وضعها بين قوسين مربعين. لا يمكن استخدام قوس الإغلاق داخل مجموعة لمطابقة نفسه، ولكن يمكن استخدامه كحرف واحد خارج المجموعة.
بالإضافة إلى قائمة الأحرف البسيطة المحاطة بأقواس مربعة، يمكن أن تحتوي قائمة الأحرف على حدود نطاق علوية وسفلية مفصولة باستخدام واصلة (-). على سبيل المثال، عند استخدام [AZ] في النمط، يتم تحقيق المطابقة إذا كان الحرف المقابل في التعبير يحتوي على أي حرف كبير في النطاق من A إلى Z. يمكنك وضع نطاقات متعددة بين قوسين مربعين دون تحديد النطاقات. على سبيل المثال، يتطابق [a-zA-Z0-9] مع أي حرف أبجدي رقمي.
يرجى ملاحظة أن أحرف بدل ANSI SQL (%) و(_) صالحة فقط في إصدار Microsoft® Jet 4.X وموفر Microsoft OLE DB لـ Jet. إذا تم استخدامها في Microsoft Access أو DAO، فسيتم التعامل معها كنص.
القواعد المهمة الأخرى لمطابقة الأنماط هي كما يلي:
سيشير استخدام علامة التعجب (!) في بداية قائمة الحروف إلى أن التطابق سيحدث في حالة ظهور أي حرف خارج قائمة الحروف في التعبير. عند استخدامها خارج الأقواس المربعة، فإن علامة التعجب تتطابق مع نفسها.
يمكن استخدام الواصلة (-) في البداية (بعد علامة التعجب) أو في نهاية قائمة الأحرف لمطابقة نفسها. في أي موضع آخر، تحدد الواصلة نطاقًا من أحرف ANSI.
عند تحديد نطاق أحرف، يجب أن تظهر الأحرف بترتيب تصاعدي (من AZ أو 0-100). [AZ] هو وضع صالح، [ZA] هو وضع غير صالح.
يتم تجاهل ترتيب الأحرف [ ]؛ ويتم التعامل معه كحرف ذي طول صفري ( ).
العنوان المرجعي: http://office.microsoft.com/zh-cn/assistance/HP010322842052.aspx
////////////////////////////////////////////////////////////////// /// //////////////
في هذه المرحلة، تم العثور على السبب أخيرًا لأنني أستخدم حرف البدل * في Access، فكل شيء يعمل بشكل جيد، ولكن إذا قمت بتغييره إلى %، فلن ينجح ذلك. في C#، يتم دعم حرف البدل % فقط، وسيؤدي استبداله بـ * إلى حدوث خطأ! فهل تعتبر هذه المشكلة مشكلة توافق؟
حرف البدل:
مثال على وصف حرف البدل
% أي سلسلة تحتوي على صفر أو أكثر من الأحرف. حيث سيجد العنوان مثل '%computer%' جميع عناوين الكتب التي تحتوي على كلمة الكمبيوتر في أي مكان في العنوان.
_ (شرطة سفلية) أي حرف واحد. حيث سيجد au_fname LIKE '_ean' جميع الأسماء المكونة من 4 أحرف تنتهي بـ ean (Dean، Sean، وما إلى ذلك).
[ ] يحدد أي حرف مفرد في النطاق ([af]) أو المجموعة ([abcdef]). حيث سيجد au_lname LIKE '[CP]arsen' ألقاب المؤلف التي تنتهي بـ arsen وتبدأ بأي حرف واحد بين C وP، على سبيل المثال، Carsen، وLarsen، وKarsen، وما إلى ذلك.
[^] أي حرف واحد لا ينتمي إلى النطاق المحدد ([af]) أو المجموعة ([abcdef]). حيث سيجد au_lname LIKE 'de[^l] %' جميع ألقاب المؤلفين التي تبدأ بـ de ولا يتبعها l.
استخدم أحرف البدل كأحرف حرفية
يمكنك استخدام سلاسل مطابقة نمط حرف البدل كسلاسل حرفية عن طريق تضمين أحرف البدل بين قوسين. يعرض الجدول التالي مثالاً لاستخدام الكلمة الأساسية LIKE وحرف البدل [ ].
معنى الرمز
مثل '5[%]' 5%
مثل '[_]ن' _ن
مثل "[a-cdf]" a أو b أو c أو d أو f
مثل "[-acdf]" - أو a أو c أو d أو f
يحب '[ [ ]' [
يحب ']' ]
مثل 'abc[_]d%' abc_d وabc_de
مثل "abc[def]" abcd وabce وabcf
مطابقة الأنماط باستخدام جملة ESCAPE
يبحث عن السلاسل التي تحتوي على حرف بدل خاص واحد أو أكثر. على سبيل المثال، قد يقوم جدول الخصومات في قاعدة بيانات العملاء بتخزين قيم الخصم بعلامة النسبة المئوية (%). للبحث عن علامة النسبة المئوية كحرف بدلاً من حرف بدل، يجب عليك توفير الكلمة الأساسية ESCAPE وحرف هروب. على سبيل المثال، تحتوي قاعدة بيانات نموذجية على عمود يسمى تعليق يحتوي على نص بنسبة 30%. للبحث عن أي صفوف تحتوي على 30% من السلسلة في أي مكان في عمود التعليق، حدد عبارة Where التي تتكون من تعليق WHERE LIKE '%30!%%' ESCAPE '!'. إذا لم تحدد ESCAPE وحرف الهروب، فسيقوم SQL Server بإرجاع كافة الصفوف التي تحتوي على السلسلة 30.
يوضح المثال التالي كيفية البحث عن السلسلة بخصم 50% عند شراء 100 نسخة أو أكثر في عمود الملاحظات بجدول العناوين في قاعدة بيانات الناشرين:
حدد الملاحظات من العناوين حيث تلاحظ "خصم 50%% عند شراء 100 نسخة أو أكثر" ESCAPE '%'