मेरे पास वर्तमान में पोस्टग्रेस पर चलने वाली क्वेरी है:LIKE '% _' के साथ मेरी क्वेरी क्यों सभी पंक्तियों को वापस करती है न केवल अंडरस्कोर में समाप्त होती है?
SELECT * FROM addenda.users WHERE users.username LIKE '%\_'
लेकिन फिर अंडरस्कोर में समाप्त होने वाली प्रविष्टियों को वापस लौटने के बाद, मुझे सभी परिणाम वापस मिलते हैं, भले ही इसमें अंडरस्कोर है या नहीं।
नीचे दी गई क्वेरी को चलाने से उपयोगकर्ता नाम लौटाता है जो कि एक अंडरस्कोर है, इसलिए भागने से काम करता है:
SELECT * FROM addenda.users WHERE users.username LIKE '\_'
और नीचे दी गई क्वेरी को चलाने से एक उपयोगकर्ता नाम लौटाता है जो एक विशिष्ट अक्षर (ओं) के साथ समाप्त होता है:
SELECT * FROM addenda.users WHERE users.username LIKE '%s'
मैं गलत क्या कर रहा हूं?
मैं सीधे सर्वर पर क्वेरी चला रहा हूं ताकि बैकस्लैश हो रहा हो। मैंने बस ESCAPE कमांड का उपयोग करने का प्रयास किया और यह ठीक से काम करता है कि मैं कैसे चाहता हूं! –
एक तैयार कथन में स्ट्रिंग डालने पर, \ \' अंडरस्कोर वर्ण से मेल खाता है, लेकिन जब SQL स्टेटमेंट में स्ट्रिंग अक्षर होता है, तो आपको इसके बजाय '\\ _' की आवश्यकता होती है। मैं अनुमान लगा रहा हूं क्योंकि पहला '\' स्ट्रिंग अक्षर स्तर पर दूसरे '\' से बचता है, फिर पोस्टग्रेस स्तर पर यह स्ट्रिंग में '\ _' देखता है और इसे अंडरस्कोर वर्ण से मेल खाता है। –
यह बड़े पैमाने पर 'standard_conforming_strings' की सेटिंग पर निर्भर करता है यदि इसे बंद कर दिया गया है तो आपको' \ 'को डबल करने की आवश्यकता है और उद्धरण चिह्न से पहले' e' रखना चाहिए। यदि यह चालू है तो केवल एक '\' की आवश्यकता है। – Jasen