أوراكل PL/SQL REGEXP_LIKE / REGEXP_INSTR
سؤال
أحتاج إلى وسيلة للتحقق لمعرفة ما إذا كانت السلسلة تحتوي على النمط الدقيق التالي بداخلها، على سبيل المثال:
(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\)')
"\" هو حرف هروب يقول "لا تبحث عن المعنى الرمزي للحرف التالي، ولكن ابحث عن الحرف الحرفي نفسه."