2015-03-23 5 views
12

मैं निम्नलिखित REGEX है:^[- एक-zA-Z0-9 /.]+$MSSQL नियमित अभिव्यक्ति

यह वर्तमान में एक टेक्स्ट बॉक्स में दर्ज किया गया मान इस से मेल खाता है कि क्या जाँच करता है। यदि नहीं, तो यह एक त्रुटि फेंकता है।

मुझे यह जांचने की ज़रूरत है कि कुछ भी डेटाबेस में पहले से ही चला गया है जो इससे मेल नहीं खाता है।

मैं थक गया है:

SELECT * FROM *table* WHERE ([url] NOT LIKE '^[-A-Za-z0-9/.]+$') 
SELECT * FROM *table* WHERE PATINDEX ('^[-A-Za-z0-9/.]+$', [url]) 

अद्यतन

तो बाद अनुसंधान मैंने महसूस किया है मुझे नहीं लगता कि मैं regexp का उपयोग कर सकते हैं का एक सा।

मैंने सोचा कि मैं ऐसा कुछ कर सकता हूं? यह मुझे अपेक्षित नतीजे नहीं दे रहा है लेकिन यह किसी और चीज के विपरीत चल रहा है। क्या कोई इसके साथ कुछ भी गलत कर सकता है?

SELECT *, 
    CASE WHEN [url] LIKE '^[-A-Za-z0-9/.]+$' 
    THEN 'Match' 
    ELSE 'No Match' 
    END Validates 
FROM 
    *table* 
+1

आप MSSQL या MySQL का उपयोग कर रहे:

यह है कि मैं क्या अंत में इस्तेमाल किया है है? वे विभिन्न आपूर्तिकर्ताओं से दो अलग-अलग, प्रतिस्पर्धी आरडीबीएमएस उत्पाद हैं और जिनके पास विभिन्न वाक्यविन्यास हैं। – eggyal

उत्तर

14

आप सभी आपकी मदद के लिए धन्यवाद।

SELECT *, 
    CASE WHEN [url] NOT LIKE '%[^-A-Za-z0-9/.+$]%' 
    THEN 'Valid' 
    ELSE 'No valid' 
    END [Validate] 
FROM 
    *table* 
    ORDER BY [Validate] 
+4

मुझे पूरा यकीन है कि उत्तर इरादे से काम नहीं करता है, क्योंकि एमएस-एसक्यूएल ऑपरेटरों की तरह RegExp के केवल एक बहुत सीमित सबसेट का समर्थन करता है: https://msdn.microsoft.com/en-us/library/ms187489(v=sql। 105) .aspx, इसलिए [] में प्रदान की गई अभिव्यक्ति सेट^-A-Za-z0-9 /.+$ से एक एकल वर्ण से मेल खाती है और शेष% द्वारा उपभोग की जाती है जो LIKE अभिव्यक्ति में किसी भी स्ट्रिंग से मेल खाती है। –

+0

@ श्री नैपिक - विचार ध्वनि है हालांकि यह संयोजन निर्भर है कि यह वास्तव में लिखित रूप में काम करता है या नहीं। '^' एक अस्वीकृति के रूप में कार्य करता है। तो कहने के बजाय "हर चरित्र को पैटर्न से मेल खाता है" यह जांचता है कि पैटर्न नहीं से मेल खाने वाले कोई वर्ण नहीं हैं। यद्यपि वास्तव में इरादे के अनुसार इसे संभवतः काम करने के लिए बाइनरी कोलेट क्लॉज की आवश्यकता होती है। जैसे 'SELECT char (संख्या) से मास्टर .. spt_values ​​देखें जहां टाइप =' पी 'और 1 और 255 और CHAR (संख्या) के बीच संख्या' [^ -A-Za-z0-9 /.+$] 'COLLATE लैटिन 1_General_Bin 'इसके साथ और इसके बिना। –

12

अस्वीकरण: मूल प्रश्न MySQL के बारे में था। SQL सर्वर उत्तर नीचे है।

SELECT * FROM YourTable WHERE (`url` NOT REGEXP '^[-A-Za-z0-9/.]+$') 

उपयोग LIKE के बजाय REGEXP खंड:

MySQL

MySQL में, regex वाक्यविन्यास निम्नलिखित है। उत्तरार्द्ध % और _ वाइल्डकार्ड का उपयोग कर पैटर्न मिलान के लिए है।


एसक्यूएल सर्वर

जब से तुम लिखने में कोई त्रुटि है, और आप एसक्यूएल सर्वर (नहीं MySQL) का उपयोग कर रहे हैं, आप regex कार्यक्षमता को बेनकाब करने के लिए एक उपयोगकर्ता परिभाषित CLR समारोह बनाने के लिए होगा।

अधिक जानकारी के लिए this article पर एक नज़र डालें।

+0

मुझे एक संदर्भ में निर्दिष्ट गैर-बूलियन प्रकार की अभिव्यक्ति मिल रही है जहां एक शर्त की उम्मीद है 'क्या मुझे किसी और चीज का संदर्भ देने की आवश्यकता है? –

+0

हम्म, मुझे लगता है कि यह Phylogenesis की टिप्पणी से संबंधित हो सकता है ... कॉलम नाम से बचने के लिए '[...]' का उपयोग न करें, यह टी-एसक्यूएल सिंटैक्स है। या तो उन्हें छोड़ दें या बैकटिक्स का उपयोग करें (') –

+0

मैंने इसे उपरोक्त कोड में बदल दिया है। अब मैं प्राप्त कर रहा हूं: 'REGEX' के पास गलत वाक्यविन्यास। अंदर या पसंद के बीच की उम्मीद है। मैंने इसे गुगल किया है और ऐसा लगता है कि इसकी एक प्रकार कास्ट त्रुटि है? –

0

उपयोग REGEXP, LIKE नहीं:

SELECT * FROM `table` WHERE ([url] NOT REGEXP '^[-A-Za-z0-9/.]+$') 
+0

यह 'रेगेक्सपी' क्या है? मुझे उस पर कोई जानकारी नहीं मिल रही है ... – Azimuth

+0

@Azimuth SQL सर्वर पर नियमित अभिव्यक्ति जानकारी यहां मिल सकती है https://docs.microsoft.com/en-us/sql/relational-databases/scripting/search-text-with -regular-expressions – Matt

+0

@Matt आपके द्वारा प्रदान किया गया लिंक SQL सर्वर के वैध वाक्यविन्यास के बजाय क्वेरी को __editing__ को संदर्भित करता है। सबसे महत्वपूर्ण बात यह है कि SQL Server 2017 में भी इसी तरह की क्वेरी चलती है 'संदर्भ में निर्दिष्ट गैर-बूलियन प्रकार की एक अभिव्यक्ति जहां एक शर्त की अपेक्षा की जाती है,' REGEXP 'त्रुटि के पास - मुझे लगता है कि अभी तक ऐसा कोई कीवर्ड नहीं है। – bjauy

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