mysql: स्ट्रिंग्स में \(बैकस्लैश) को बदलें




replace backslash (5)

मुझे निम्न समस्या हो रही है:

मेरे पास एक टेबल टी है जिसमें नाम के साथ कॉलम नाम है I नाम निम्न संरचना है:

एक \\ बी \ सी

आप इस तरह खुद पर बना सकते हैं:

create table T ( Name varchar(10));

insert into T values ('A\\\\B\\C');

select * from T;

अब अगर मैं ऐसा करता हूं:

select Name from T where Name = 'A\\B\C';

यह काम नहीं करता, मुझे \ (बैकस्लैश) से बचने की आवश्यकता है:

select Name from T where Name = 'A\\\\B\\C';

ठीक।

लेकिन मैं यह कैसे एक स्ट्रिंग नाम के लिए स्वचालित रूप से कर सकता हूँ?

ऐसा कुछ ऐसा नहीं करेगा:

select replace('A\\B\C', '\\', '\\\\');

मुझे मिलता है: A\\\BC

कोई सुझाव?

अग्रिम में बहुत धन्यवाद।


नियमित अभिव्यक्ति का उपयोग आपकी समस्या का समाधान करेगा।

यह नीचे की क्वेरी दिए गए उदाहरण को हल करेगा।

  1) S\\D\B

select * from T where Name REGEXP '[A-Z]\\\\\\\\[A-Z]\\\\[A-Z]$';

यदि दिए गए उदाहरण के लिए अधिक हो तो एक चार हो सकता है

2) D\\B\ACCC

select * from T where Name REGEXP '[A-Z]{1,5}\\\\\\\\[A-Z]{1,5}\\\\[A-Z]{1,5}$';

ध्यान दें: मैंने फ़ील्ड के आकार पर विचार करते हुए चारों की अधिकतम घटना 10 के रूप में उपयोग की है, जैसा कि टेबल क्वेरी बनाने में उल्लिखित है

हम अभी भी इसका सामान्यीकरण कर सकते हैं.अगर यह अभी भी आपकी उम्मीद से नहीं मिला है तो मेरी मदद माँगने के लिए बेझिझक।


आपको " शब्दशः स्ट्रिंग " का उपयोग करना होगा। उस स्ट्रिंग का उपयोग करने के बाद आपके फ़ैशन इस तरह दिखेगा

Replace(@"\", @"\\")

मुझे आशा है कि यह आपके लिए मदद करेगा


शाब्दिक A\\B\C को A\\\\A\\C रूप में कोडित किया जाना चाहिए, और replace() करने के मापदंडों को भी बचने की ज़रूरत है:

select 'A\\\\B\\C', replace('A\\\\B\\C', '\\', '\\\\');

आउटपुट ( यह देखें SQLFiddle पर चल रहा है ):

A\\B\C         A\\\\B\\C


तो प्रतिस्थापन का उपयोग करने में थोड़ी सी बात है ये दो बयान समतुल्य हैं:

select Name from T where Name = replace('A\\\\B\\C', '\\', '\\\\');
select Name from T where Name =         'A\\\\B\\C';

आप SQL कथन में उस डेटा का प्रतिनिधित्व करते हुए डेटाबेस में क्या भ्रमित हैं। जब डेटाबेस में एक स्ट्रिंग में एक विशेष वर्ण होता है, तो आपको उस वर्ण का प्रतिनिधित्व करने के लिए \\ टाइप करना होगा, क्योंकि \ SQL वाक्यविन्यास में एक विशेष वर्ण है आपको इसे INSERT स्टेटमेंट में करना है, लेकिन आपको यह भी पैरामीटर में REPLACE फ़ंक्शन में करना होगा। डेटा में वास्तव में कोई भी डबल स्लैश नहीं हैं, वे UI का सिर्फ एक हिस्सा हैं।

आपको लगता है कि आपको SQL अभिव्यक्ति में स्लैश को दोगुना करने की आवश्यकता क्यों है? यदि आप टाइपिंग क्वेरीज़ चाहते हैं, तो आपको अपने आदेश पंक्ति में केवल स्लैश को दोहरा देना चाहिए। यदि आप प्रोग्रामिंग भाषा में क्वेरी का निर्माण कर रहे हैं, तो सबसे अच्छा समाधान तैयार कथन का उपयोग करना है; एपीआई उचित एन्कोडिंग का ध्यान रखेगा (तैयार बयान आमतौर पर एक बाइनरी इंटरफ़ेस का उपयोग करते हैं, जो कच्चे डेटा से संबंधित है) यदि, किसी कारण के लिए, आपको स्ट्रिंग्स के निर्माण से क्वेरी करने की ज़रूरत है, तो भाषा को उम्मीद है कि स्ट्रिंग से बचने के लिए एक फ़ंक्शन प्रदान किया जाना चाहिए। उदाहरण के लिए, PHP में आप mysqli_real_escape_string का mysqli_real_escape_string करेंगे

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


आप उपयोग कर सकते हैं LIKE :

SELECT NAME FROM T WHERE NAME LIKE '%\\\\%';




backslash