اذهب إلى المحتوى
  • 0

كيف ابحث عن كلمة كاملة وليس بجزء منها؟ بالـ SQL

Mazz Ibraheem

السؤال

السلام عليكم 

اولاً شكراَ على المرور

ثانياً سؤالي هو كيف ابحث عن كلمة كاملة وليس بجزء منها؟؟!!!!! لم تفهم السؤال بعد، اليس كذلك: اليك الشرح :

 

مثلاً لدي عمود باسم col1 يحتوي على الآتي :

  1. مجد الأمة
  2. عاودني مجدداً
  3. مجدي سعيد
  4. فكرة مجدية

عند تنفيذ الكود الاتي

SELECT col1 FROM tab1 WHERE col1 LIKE %مجد%

سيكون الناتج هو كل الصفوف السابقة لان هذا الكود يبحث عن جزء من الكلمة ، وانا اريد ان يكون الناتج هو الصف الاول فقط "مجد الأسلام" لأن كلمة مجد موجودة فيه بالكامل، اي لا اريده ان يحضر الكلمات التي تحتوي على جزء من الكلمة التي ابحث عنها فقط اريد ان تكون النتائج التي يحضرها تكون بالكلمة كاملة فقط وليس بالكلمات التي تحتوي على جزء من كلمة البحث.

 

قمت بتجربه هذا الكود

SELECT col1 FROM tab1 WHERE col1 LIKE % مجد % OR col2 LIKE مجد % OR col2 LIKE % مجد

اولا استخدمت مسافة قبل وبعد الكلمة وايضا احتمال ان تكون الكلمة في بدايه الجملة ونهايتها ، كان جيدا ويعمل 100% ، لكن ظهرت مشكلة علامات الترقيم ، هناك علامات كثيرة تستخدم في الجمل وستخرج احتمالات كثيرة ، هل الحل هو باستخدام هذه الطريقه واستخدام جميع احتمالات علامات الترقيم؟ ام ان هناك حل اخر؟!

وشكرا لكم

رابط هذا التعليق
شارك على الشبكات الإجتماعية

Recommended Posts

  • 1
بتاريخ 48 دقائق مضت قال Mazz Ibraheem:

 

لكن تبقت مشكلة علامات الترقيم ، كيف اخبرة بأن من المحتمل ان تكون كلمة مجد بهذا الشكل "مجد!" او "مجد؟" كيف اجعلة يتجاهل هذه العلامتان ان وجدتا

يمكنك تجربة الكود بعد تعديله ليتضمن الكلمات التي تنتهي ب ؟ و ! 

SELECT col1 FROM tab1 WHERE col1 regexp '(^|[[:space:]])مجد([\?!])?([[:space:]]|$)';
 
	
رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 1

يمكنك استخدام الـ regular expressions كالتالي :

SELECT * FROM products WHERE product_name RLIKE "[[:<:]]foo[[:>:]]";

حيث ان [[:>:]] تشير إلى بداية الكلمة و [[:<:]] تشير إلى نهاية الكلمة.

اعرف اكثر عن التعابير النمطية regular expressions :

اطلع على التعابير النمطية في sql

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 1

بما أنك تريد إستهداف كلمات بعينها وليس جزء من نص يحتوي حروف تلك الكلمة, فالأفضل إستخدام الأداة regexp في جملة sql كما يلي 

SELECT col1 FROM tab1 WHERE col1 regexp '(^|[[:space:]])مجد([[:space:]]|$)';
-- تساوي الكلمة مجد col1ستعيد لك هذه الجملة جميع المدخلات التي تكون فيها قيمة 
	

يمكنك البحث عن معاني رموز  النمط التعبيري المستخدم أعلاه لمزيد من الفهم. مثلاً ^ تعني بداية نص أو الchar الذي يسبقه و $ تعني نهايته و space تعني مسافة.

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 1
بتاريخ 56 دقائق مضت قال Mazz Ibraheem:

هناك خطا يظهر عند التنفيذ بال DB BROWSER

هذا يعني أنك تستعمل sqlite. هل يمكنك إدراج رسالة الخطأ لديك؟ أيضا يرجى إدراج إصدار DB4S الذي تستعمله.

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 1
بتاريخ 57 دقائق مضت قال Mazz Ibraheem:

بالطبع هذا الكود لم يعمل معي لكن عند التفكير فيه ففكرته تقوم على جلب الكلمات التي تبدأ ب *** وتنتهي ب***

لو ان لدي هذه البيانات

  1. milk is word
  2.  wordPress and winWord
  3. wordddd

وقمت بالبحث عن كلمة "word" ، باستخدام كودك سيعيد لي الصف " 1 و 2 " لان الصف الثاني يحتوي على كلمة تبدأ ب word وايضا كلمة تنتهي ب word ونكون قد عدنا لنفس المشكلة.

في كودك يا سيدي كنت تعتمد على space في كلا الجهتين متجاهلا ان الكلمة قد تكون بداية الجملة او نهايتها 

واسف على الاطالة

 

بتاريخ 2 ساعات قال Mazz Ibraheem:

رسالة الخطأ

-- At line 1:

SELECT col1 FROM tab1 WHERE col1 regexp '(^|[[:space:]])مجد([[:space:]]|$)';

-- Result: invalid operand

=======

ماهو DB4S 

 أولاً لا تحكم قبل أن تجرب. الشيء الثاني DB Browser for SQLite (DB4S) تأكد من أنك تستعمل إصداراً حديثاً أحدث من 3.6 وأن خيار disable regular expression extension ليس مفعلاً.

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0

بالطبع هذا الكود لم يعمل معي لكن عند التفكير فيه ففكرته تقوم على جلب الكلمات التي تبدأ ب *** وتنتهي ب***

لو ان لدي هذه البيانات

  1. milk is word
  2.  wordPress and winWord
  3. wordddd

وقمت بالبحث عن كلمة "word" ، باستخدام كودك سيعيد لي الصف " 1 و 2 " لان الصف الثاني يحتوي على كلمة تبدأ ب word وايضا كلمة تنتهي ب word ونكون قد عدنا لنفس المشكلة.

في كودك يا سيدي كنت تعتمد على space في كلا الجهتين متجاهلا ان الكلمة قد تكون بداية الجملة او نهايتها 

واسف على الاطالة

تم التعديل في بواسطة Mazz Ibraheem
رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ 12 ساعات قال علي محسن:

 

 أولاً لا تحكم قبل أن تجرب. الشيء الثاني DB Browser for SQLite (DB4S) تأكد من أنك تستعمل إصداراً حديثاً أحدث من 3.6 وأن خيار disable regular expre

n ليس مفعلاً.

فعلاً استاذي كلمتك من ذهب"لاتحكم قبل ان تجرب" ، انا اعتذر على وقاحتي ولكن صدقني لم اقصد ذلك 

 

عند تفعيلي regular expression extension اشتغل البرنامج جيدا كان هو السبب في فشلة شكرا لك استاذي العزيز علي محسن وايضا عمر قرة كانت مشاركتكما لي في هذه المشكلة مفيدةً جدا اشكركما مجدداً

============

لكن تبقت مشكلة علامات الترقيم ، كيف اخبرة بأن من المحتمل ان تكون كلمة مجد بهذا الشكل "مجد!" او "مجد؟" كيف اجعلة يتجاهل هذه العلامتان ان وجدتا

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ 8 ساعات قال علي محسن:

يمكنك تجربة الكود بعد تعديله ليتضمن الكلمات التي تنتهي ب ؟ و ! 


SELECT col1 FROM tab1 WHERE col1 regexp '(^|[[:space:]])مجد([\?!])?([[:space:]]|$)';
 
	

رائع انه يعمل بشكل ممتاز مع sqlit شكرا لك عزيزي ـ لكن لماذا لا يعمل م android studio قمت بادراج الكود مباشرة في db.rawQuery ولم يعمل معي بل ويغلق التطبيق

رابط هذا التعليق
شارك على الشبكات الإجتماعية

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...