2013-05-10 6 views
7

के साथ क्वेरी खोज को कैसे संभाला जाए, मेरे पास टेबल है जहां एक कॉलम '/' फॉरवर्ड स्लैश और '\' बैक स्लैश जैसे विशेष वर्णों को अनुमति देता है।mysql - विशेष वर्णों ((फॉरवर्ड स्लैश) और (बैकस्लैश)

अब जब मैं टेबल से ऐसे रिकॉर्ड खोजने की कोशिश कर रहा हूं, तो मैं उनको प्राप्त करने के लिए तैयार हूं।

उदाहरण: एबीसी \ डीईएफ़ या एबीसी/डीईएफ़ मैं पैदा कर रहा हूँ खोज प्रश्न है जो

तरह
select * from table1_1 where column10 like '%abc\def%' 

यह 0 पंक्तियों लौटा रहा है लेकिन actaully वहाँ 1 रिकॉर्ड मौजूदा है। इस मामले में एक प्रश्न कैसे लिखें, मुझे बताएं।

धन्यवाद।

+0

पीएल/एसक्यूएल ओरेकल की प्रक्रियात्मक भाषा (एसक्यूएल के समान नहीं है) ... MySQL एक पूरी तरह से अलग आरडीबीएमएस है ... क्या आप ओरेकल या MySQL का उपयोग कर रहे हैं? – Ben

उत्तर

14

Barmar आंशिक रूप से सही है (ताकि +1) है,

तो चाल स्ट्रिंग निकल जाता है के लिए केवल एक ही भागने की जरूरत है, केवल बैकस्लैश से बचने को दोगुना करने की है।

उदाहरण

  • एकल उद्धरण ' केवल एक बार भागने की जरूरत के लिए LIKE '%\'%'
  • लेकिन बैकस्लैश \ आप दोगुना करने के लिए LIKE '%\\\\%'
  • पर भाग की जरूरत है आप बैकस्लैश + singlequote \' तो LIKE '%\\\\\'%' क्वेरी करने के लिए करना चाहता था, तो क्वेरी करने के लिए (5 बैकस्लाश के साथ)

Explanation Source अंश:

क्योंकि MySQL तार में सी बच सिंटैक्स का उपयोग करता (उदाहरण के लिए, "\ n" करने के लिए एक नई पंक्ति चरित्र प्रतिनिधित्व करते हैं), तो आप डबल किसी भी "\" कि आप की तरह में उपयोग करना चाहिए तार। उदाहरण के लिए, "\ n" खोजने के लिए, इसे "\ n" के रूप में निर्दिष्ट करें। "\" के लिए खोज करने के लिए, इसे "\\" के रूप में निर्दिष्ट करें; ऐसा इसलिए है क्योंकि बैकस्लाश पार्सर द्वारा एक बार छीन लिया गया है और फिर जब पैटर्न मिलान बनाया गया है, तो एक बैकस्लैश के साथ मिलान किया जा सकता है।

+1

असल में मैंने इसे बिना काम किए गए क्वेरी को जोड़कर लंबे समय तक काम किया है .. यह स्पष्टीकरण मुझे क्या +1 और मेरा उत्तर – JAVAC

+0

आगे स्लैश के लिए कोई विचार है ?? सम्मिलित क्वेरी में। मेरा पाठ कुछ/कुछ है। और यह मुझे हमेशा त्रुटि दे रहा है। – Saad

+0

आप $ newtext = addlashes ('somex/somey') का उपयोग कर सकते हैं; PHP में समारोह। http://php.net/addslashes – xchiltonx

1

आप किसी अन्य \

select * from table1_1 where column10 like '%abc\\def%' 
0

उपयोग से बचने के साथ \ से बचने के लिए किया है।

https://dev.mysql.com/doc/refman/5.0/en/string-literals.html

तालिका 9.1। स्पेशल कैरेक्टर एस्केप सीक्वेंस

सीक्वेंस \ 0 एएससीआईआई एनयूएल (0x00) वर्ण द्वारा प्रतिनिधित्व अनुक्रम अनुक्रम चरित्र से बचें।

\ 'एक एकल उद्धरण ("'") चरित्र।

\ "एक डबल कोट (" "") चरित्र।

\ बी एक बैकस्पेस चरित्र।

\ n एक नई लाइन (लाइनफीड) वर्ण।

\ r एक कैरिज रिटर्न कैरेक्टर।

\ t एक टैब वर्ण।

\ Z ASCII 26 (नियंत्रण + जेड)। तालिका के बाद नोट देखें।

\ बैकस्लैश ("\") वर्ण।

\% ए "%" चरित्र। तालिका के बाद नोट देखें।

_ ए "_" चरित्र। तालिका के बाद नोट देखें।

1

LIKE मूल्य से बचने पर मैंने काम नहीं किया जब मैंने इसे MySQL v5.5 पर करने की कोशिश की। कुछ प्रयासों के बाद, काम एक रेगेक्स था (और मुझे वहां भी भागना पड़ा, और इसे एक चरित्र वर्ग में छुपाएं)।

select * from table1_1 where column10 rlike 'abc[\\]def' 

ये काम नहीं किया:

... column10 like '%abc\\def%' 
... column10 like concat('%abc', char(92), 'def%') 
... column10 rlike 'abc\\def' 

नोट आप भी इस PL/SQL, जो ओरेकल है के रूप में टैग मैं अंत में यह इस तरह काम करने के लिए मिला है। आपके द्वारा पोस्ट की गई क्वेरी ओरेकल पर काम करती है। क्या पीएल/एसक्यूएल टैग गलती है?

10

MySQL में, यह काम करता है:

select * from Table1 
where column10 like '%abc\\\\def%' 

FIDDLE

बैकस्लैश दोनों तार और LIKE पैटर्न को पलायन उपसर्ग है। तो आपको LIKE के लिए इसे बार-बार डबल करने की आवश्यकता है, और फिर स्ट्रिंग शाब्दिक वाक्यविन्यास के लिए।

+0

+1 और धन्यवाद @ बाड़ार - मैंने उन सभी चीजों में से जो मैंने अपने उत्तर के लिए कोशिश की थी कि कोई मेरे साथ कभी नहीं हुआ। मैं जो आया उसके मुकाबले बहुत साफ है। –

+0

@EdGibbs मैंने अभी तक काम करने तक बैकस्लैश जोड़ना जारी रखा। :) – Barmar

संबंधित मुद्दे