PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

रेगुलर एक्सप्रेशन या LIKE पैटर्न के लिए एस्केप फंक्शन

शीर्ष पर प्रश्न का समाधान करने के लिए:

रेगुलर एक्सप्रेशन एस्केप फंक्शन

आइए रेगुलर एक्सप्रेशन . में विशेष अर्थ वाले वर्णों की पूरी सूची के साथ प्रारंभ करें पैटर्न:

!$()*+.:<=>?[\]^{|}-

एक कोष्ठक अभिव्यक्ति में लिपटे हुए उनमें से अधिकांश अपना विशेष अर्थ खो देते हैं - कुछ अपवादों के साथ:

  • - पहले या अंतिम होना चाहिए या यह एक श्रेणी . को दर्शाता है पात्रों की।
  • ] और \ \ . से बचना होगा (प्रतिस्थापन में भी)।

नीचे दिए गए बैक रेफरेंस के लिए कैप्चरिंग कोष्ठक जोड़ने के बाद हमें यह रेगेक्सपी पैटर्न मिलता है:

([!$()*+.:<=>?[\\\]^{|}-])

इसका उपयोग करके, यह फ़ंक्शन बैकस्लैश के साथ सभी विशेष वर्णों से बच निकलता है (\ ) - इस प्रकार विशेष अर्थ को हटा रहा है:

CREATE OR REPLACE FUNCTION f_regexp_escape(text)
  RETURNS text
  LANGUAGE sql IMMUTABLE STRICT PARALLEL SAFE AS
$func$
SELECT regexp_replace($1, '([!$()*+.:<=>?[\\\]^{|}-])', '\\\1', 'g')
$func$;

PARALLEL SAFE जोड़ें (क्योंकि यह है ) पोस्टग्रेज 10 या बाद के संस्करण में इसका उपयोग करने वाले प्रश्नों के लिए समानता की अनुमति देने के लिए।

डेमो

SELECT f_regexp_escape('test(1) > Foo*');

रिटर्न:

test\(1\) \> Foo\*

और जबकि:

SELECT 'test(1) > Foo*' ~ 'test(1) > Foo*';

रिटर्न FALSE , जो भोले-भाले उपयोगकर्ताओं के लिए आश्चर्य की बात हो सकती है,

SELECT 'test(1) > Foo*' ~ f_regexp_escape('test(1) > Foo*');

रिटर्न TRUE जैसा कि अभी होना चाहिए।

LIKE एस्केप फंक्शन

पूर्णता के लिए, LIKE . के लिए पेंडेंट पैटर्न, जहां केवल तीन वर्ण विशेष हैं:

\%_

मैनुअल:

<ब्लॉकक्वॉट>

डिफ़ॉल्ट एस्केप कैरेक्टर बैकस्लैश है, लेकिन ESCAPE का उपयोग करके किसी अन्य को चुना जा सकता है खंड।

यह फ़ंक्शन डिफ़ॉल्ट मानता है:

CREATE OR REPLACE FUNCTION f_like_escape(text)
  RETURNS text
  LANGUAGE sql IMMUTABLE STRICT PARALLEL SAFE AS
$func$
SELECT replace(replace(replace($1
         , '\', '\\')  -- must come 1st
         , '%', '\%')
         , '_', '\_');
$func$;

हम अधिक सुंदर regexp_replace() . का उपयोग कर सकते हैं यहाँ भी, लेकिन कुछ पात्रों के लिए, replace() . का एक झरना कार्य तेज है।

फिर से, PARALLEL SAFE पोस्टग्रेज 10 या बाद के संस्करण में।

डेमो

SELECT f_like_escape('20% \ 50% low_prices');

रिटर्न:

20\% \\ 50\% low\_prices


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. सोलारिस पर PostgreSQL प्रक्रिया के नाम

  2. PostgreSQL 13 में नया क्या है?

  3. कैसे तन () PostgreSQL में काम करता है

  4. वर्चर फ़ील्ड के प्रकार को पूर्णांक में बदलें:पूर्णांक टाइप करने के लिए स्वचालित रूप से कास्ट नहीं किया जा सकता

  5. Postgresql सुपरसुसर के रूप में "बनाया गया" के साथ डीबी नहीं बना रहा है, फिर भी त्रुटियों को आउटपुट नहीं कर रहा है