SQL LIKE क्लॉज के लिए विशेष वर्णों की सूची


119

SQL के लिए सभी विशेष वर्णों की पूरी सूची क्या है (मैं SQL सर्वर में दिलचस्पी रखता हूं, लेकिन अन्य अच्छा भी होगा) LIKE क्लॉज?

उदाहरण के लिए

SELECT Name FROM Person WHERE Name LIKE '%Jon%'

SQL सर्वर :

  1. %
  2. _
  3. [विनिर्देशक] जैसे [az]
  4. [^ विनिर्देशक]
  5. ESCAPE क्लाज एग 30%! %% 'ESCAPE'! ' सच के रूप में 30% का मूल्यांकन करेगा
  6. 'पात्रों को' जैसे वे बन जाते हैं वैसे ही बच निकलने की जरूरत है

माई एसक्यूएल:

  1. % - शून्य या अधिक वर्णों की कोई स्ट्रिंग।
  2. _ - कोई एकल चरित्र
  3. ESCAPE क्लाज एग 30%! %% 'ESCAPE'! ' सच के रूप में 30% का मूल्यांकन करेगा

आकाशवाणी:

  1. % - शून्य या अधिक वर्णों की कोई स्ट्रिंग।
  2. _ - कोई एकल चरित्र
  3. ESCAPE क्लाज एग 30%! %% 'ESCAPE'! ' सच के रूप में 30% का मूल्यांकन करेगा

Sybase

  1. %
  2. _
  3. [विनिर्देशक] जैसे [az]
  4. [^ विनिर्देशक]

प्रगति:

  1. % - शून्य या अधिक वर्णों की कोई स्ट्रिंग।
  2. _ - कोई एकल चरित्र

    संदर्भ गाइड यहाँ [PDF]

PostgreSQL:

  1. % - शून्य या अधिक वर्णों की कोई स्ट्रिंग।
  2. _ - कोई एकल चरित्र
  3. ESCAPE क्लाज एग 30%! %% 'ESCAPE'! ' सच के रूप में 30% का मूल्यांकन करेगा

ANSI SQL92:

  1. %
  2. _
  3. निर्दिष्ट किए जाने पर ही कोई ESCAPE वर्ण ।

PostgreSQL में SIMILAR TOऑपरेटर भी है जो निम्नलिखित जोड़ता है:

  1. [specifier]
  2. [^specifier]
  3. | - या तो दो विकल्पों में से
  4. * - पिछले आइटम की पुनरावृत्ति शून्य या अधिक बार।
  5. + - पिछले आइटम की पुनरावृत्ति एक या अधिक बार।
  6. () - समूह आइटम एक साथ

यह विचार इस समुदाय को विकी बनाने के लिए है जो इसके लिए "वन स्टॉप शॉप" बन सकता है।


यह संभवतः ESCAPE खंड का उल्लेख करने योग्य है। SQL सर्वर, Oracle और MySQL सभी इस का समर्थन करते हैं। Sybase के बारे में नहीं जानते।
डेव वेब

मुझे लगता है कि अब ESCAPE क्लॉज मानक एसक्यूएल है, इसलिए शायद केवल एक बार उल्लेख करने की आवश्यकता है
डेव वेब

मुझे खुद नहीं पता है कि यह सभी सूचीबद्ध सर्वरों में लागू किया गया है (और बाद में जोड़ा जा सकता है) इसलिए मैं इसे "सभी समर्थन" अनुभाग में बाहर निकालने के लिए अनिच्छुक हूं। यदि आप आश्वस्त हैं कि वे सभी समर्थित हैं तो आगे बढ़ें।
जोनाथन पार्कर

भागने के चरित्र से बचने के लिए खुद को मत भूलना ...
क्रिस्टोफर हम्मरस्ट्रॉम जूल

दो टिप्पणियाँ। सबसे पहले, Microsoft SQL शुरुआत में Sybase से आता है, इसलिए समानता संयोग नहीं है। दूसरा, किसी अन्य के साथ एक ही उद्धरण से बचना सीमित नहीं है LIKE; उदाहरण के लिए WHERE familyname = 'O''Toole'। तीसरा, SIMILAR TOऑपरेटर एक प्रकार की हाइब्रिड नियमित अभिव्यक्ति का परिचय देता है, जिसकी अपनी विशेषताएं (और कई और विशेष वर्ण) हैं, इसलिए शायद यहां शामिल नहीं होना चाहिए। मुझे लगता है कि 3 टिप्पणी करता है, लेकिन कोई भी स्पेनिश पूछताछ की उम्मीद करता है।
मन्ंजो

जवाबों:


22

SQL सर्वर के लिए, http://msdn.microsoft.com/en-us/library/ms179859.aspx से :

  • % शून्य या अधिक वर्णों की कोई स्ट्रिंग।

    WHERE title LIKE '%computer%' पुस्तक शीर्षक में कहीं भी 'कंप्यूटर' शब्द के साथ सभी पुस्तक शीर्षक मिलते हैं।

  • _ कोई एकल चरित्र।

    WHERE au_fname LIKE '_ean' सभी चार-अक्षर वाले पहले नाम को ढूँढता है जो ean (डीन, सीन, और इसी तरह) के साथ समाप्त होता है।

  • [] निर्दिष्ट सीमा ([af]) या सेट ([abcdef]) के भीतर कोई एकल वर्ण।

    WHERE au_lname LIKE '[C-P]arsen'लेखक को अंतिम नाम आर्सेन के साथ समाप्त होता है और सी और पी के बीच किसी भी एक चरित्र के साथ शुरू होता है, उदाहरण के लिए कारसेन, लार्सन, कारसेन, और इसी तरह। श्रेणी खोजों में, श्रेणी में शामिल वर्णों के क्रमबद्धता के आधार पर भिन्न हो सकते हैं।

  • [^] कोई भी एकल वर्ण निर्दिष्ट सीमा ([^ af]) या सेट ([^ abcdef]) के भीतर नहीं है।

    WHERE au_lname LIKE 'de[^l]%' सभी लेखक अंतिम नाम डी से शुरू करते हैं और जहां निम्नलिखित पत्र एल नहीं है।


1
मैंने अभी कोशिश की है और ऐसा लग रहा है कि आप कर सकते हैं। लेकिन यह नियमित अभिव्यक्तियों की तरह नहीं है => [0-9] इसके बजाय आपको प्रत्येक चरित्र को इस तरह निर्दिष्ट करने की आवश्यकता है: [0123456789]
--ağdaş Tekin

3
इंतजार नहीं। यह RegEx की तरह है इसलिए [0-9] भी काम करता है। गलतफहमी के लिए खेद है।
9ağdaş Tekin

6

ANSI SQL92 :

  • %
  • _
  • निर्दिष्ट होने पर ही कोई ESCAPE वर्ण ।

यह निराशाजनक है कि कई डेटाबेस मानक नियमों से चिपकते नहीं हैं और अतिरिक्त अक्षर जोड़ते हैं, या गलत तरीके से ESCAPE को '' '' के डिफ़ॉल्ट मान के साथ गायब होने पर सक्षम करते हैं। जैसे हम '\' के साथ पहले से ही काफी परेशान नहीं हैं!

यहां DBMS- इंडिपेंडेंट कोड लिखना असंभव है, क्योंकि आप नहीं जानते कि आपको किन कैरेक्टर्स से बचना है, और स्टैण्डर्ड कहता है कि आप उन चीजों से बच नहीं सकते, जिनसे बचने की जरूरत नहीं है। (धारा 8.5 / सामान्य नियम / 3.a.ii देखें)

धन्यवाद एसक्यूएल! gnnn


5

SQL सर्वर में आपको एक अतिरिक्त 'बचने के लिए' जोड़ने के लिए जोड़ना चाहिए:

स्मिथ का -> स्मिथ का


1

साइबेस:

%              : Matches any string of zero or more characters.
_              : Matches a single character.
[specifier]    : Brackets enclose ranges or sets, such as [a-f] 
                 or [abcdef].Specifier  can take two forms:

                 rangespec1-rangespec2: 
                   rangespec1 indicates the start of a range of characters.
                   - is a special character, indicating a range.
                   rangespec2 indicates the end of a range of characters.

                 set: 
                  can be composed of any discrete set of values, in any 
                  order, such as [a2bR].The range [a-f], and the 
                  sets [abcdef] and [fcbdae] return the same 
                  set of values.

                 Specifiers are case-sensitive.

[^specifier]    : A caret (^) preceding a specifier indicates 
                  non-inclusion. [^a-f] means "not in the range 
                  a-f"; [^a2bR] means "not a, 2, b, or R."

0

SQL सर्वर के लिए संभावित उत्तर

दिलचस्प बात यह है कि मैंने सिर्फ SQL सर्वर के साथ LinqPad का उपयोग करके एक परीक्षण चलाया, जो कि बस Linq को SQL के नीचे चलाना चाहिए और यह निम्न SQL कथन उत्पन्न करता है।

रिकॉर्ड .Where (r => r.Name.Contains ("lkjwer --_ ~ []]))

-- Region Parameters
DECLARE @p0 VarChar(1000) = '%lkjwer--~_~~~[]%'
-- EndRegion
SELECT [t0].[ID], [t0].[Name]
FROM [RECORDS] AS [t0]
WHERE [t0].[Name] LIKE @p0 ESCAPE '~'

इसलिए मैंने अभी तक इसका परीक्षण नहीं किया है, लेकिन ऐसा लगता है कि संभावित रूप से ESCAPE '~'कीवर्ड एक अभिव्यक्ति के भीतर उपयोग के लिए स्ट्रिंग के स्वचालित भागने की अनुमति दे सकता है।


वे शायद सिर्फ ESCAPEइसलिए उपयोग कर रहे हैं क्योंकि यह तीन के बजाय प्रति चरित्र दो पात्रों (जैसे, %बन जाता है ~%) का उपयोग करने की अनुमति देता है (जैसे, बिना ESCAPE, %बन जाता है [%])।
binki
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.