जैसे @a_horse ने टिप्पणी की, आपको रेगुलर एक्सप्रेशन ऑपरेटर का उपयोग करना होगा ~
ब्रैकेट एक्सप्रेशन का उपयोग करने के लिए।
लेकिन और भी बहुत कुछ है। मेरा सुझाव है:
SELECT *
FROM tbl
WHERE value ~ '^00[^0]'
^
... स्ट्रिंग की शुरुआत में मिलान करें (आपकी मूल अभिव्यक्ति किसी भी . पर मेल खा सकती है स्थिति)।[^0]
... एक कोष्ठक व्यंजक (चरित्र वर्ग) किसी भी . से मेल खाता है वर्ण जो 0
नहीं है ।
या बेहतर , फिर भी:
SELECT *
FROM tbl
WHERE value LIKE '00%' -- starting with '00'
AND value NOT LIKE '000%' -- third character is not '0'
क्यों? LIKE
उतना शक्तिशाली नहीं है, लेकिन आम तौर पर नियमित अभिव्यक्तियों की तुलना में तेज़ है। सस्ते LIKE
. के साथ उम्मीदवारों के समूह को कम करना संभवत:काफी तेज़ है अभिव्यक्ति।
आम तौर पर, आप NOT LIKE '__0'
. का प्रयोग करेंगे , लेकिन चूंकि हम पहले से ही LIKE '00%'
. स्थापित कर चुके हैं दूसरे विधेय में, हम संकरा (सस्ता) पैटर्न का उपयोग कर सकते हैं NOT LIKE '000'
।
Postgres एक साधारण btree अनुक्रमणिका . का उपयोग कर सकते हैं लेफ्ट-एंकर एक्सप्रेशन के लिए value LIKE '00%'
(बड़ी तालिकाओं के लिए महत्वपूर्ण), जबकि यह अधिक जटिल नियमित अभिव्यक्ति के लिए काम नहीं कर सकता है। Postgres का नवीनतम संस्करण सरल नियमित अभिव्यक्तियों के लिए अनुक्रमणिका का उपयोग कर सकता है, इसलिए यह हो सकता है इस उदाहरण के लिए काम करें। विवरण:
- पोस्टग्रेज में LIKE और ~ के बीच अंतर