سؤال

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

(P)

ومن الأمثلة على ذلك أن هذا صحيح هو:

"نظام الاختبار (ع)"

غير متأكد من كيفية التحقق من الحالات التي لا تحتوي فيها السلسلة على "(P)"، أي:

"اختبار النظام (واجهة المستخدم الرسومية للأستاذ)" - في هذه الحالة، سيكون هذا خطأ ولكنني أستخدم REGEXP_LIKE وهو يُرجع بالفعل TRUE.

أريد فقط أن يُرجع True عندما تكون السلسلة الدقيقة لـ "(P)" موجودة ضمن سلسلة البحث.

أي مساعدة في تحقيق ذلك باستخدام PL/SQL ستكون رائعة.

شكرًا.

هل كانت مفيدة؟

المحلول

استخدم:

REGEX_LIKE(t.column, '\(P\)')

Regular-Expressions.info هو كبير من الموارد.

INSTR ستعمل (أوراكل 8I +):

WHERE INSTR(t.column, '(P)') > 0 --column contains '(P)'

WHERE INSTR(t.column, '(P)') = 0 --column does NOT contain '(P)'

ومثل يعمل أيضا:

WHERE t.column LIKE '%(P)%' --column contains '(P)'

WHERE t.column NOT LIKE '%(P)%' --column does NOT contain '(P)'

نصائح أخرى

وحاول like:

WHERE thing like '%(P)%';

أود أن العصا مع REGEXP_* الوظائف، حيث ستحتاج إلى التدرب عليها على أي حال، ومعرفة التعبيرات العادية ستخدمك جيدًا.

إنها جميعها إجابات جيدة، باستثناء الخطأ المطبعي في إجابة بونيز الأولى.:

الخطأ المطبعي هو أن هناك ص مفقود من REGEX_LIKE:

مكتوب: REGEX_LIKE(t.column, '\(P\)')

صحيح: REGEXP_LIKE(T.COLUMN, '\(P\)')

"\" هو حرف هروب يقول "لا تبحث عن المعنى الرمزي للحرف التالي، ولكن ابحث عن الحرف الحرفي نفسه."

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top