2012-01-19 10 views
49

मैं कैसे रेगुलर एक्सप्रेशन से सेटिंग/नीचे पैरामीटर के आधार पर रेगुलर एक्सप्रेशन से का उपयोग कर को बदलने के लिए/एनकोड पाठ देख रहा हूँ:एसक्यूएल सर्वर में रेगुलर एक्सप्रेशन से उपयोग करना

RegEx.IgnoreCase = True  
RegEx.Global = True  
RegEx.Pattern = "[^a-z\d\s.]+" 

मैं रेगुलर एक्सप्रेशन से कुछ उदाहरण देखा है, लेकिन कैसे लागू करने के लिए के रूप में उलझन में यह SQL सर्वर में वही तरीका है। कोई भी सुझाव महत्वपूर्ण है। धन्यवाद।

+0

हाय ले इस आलेख पर एक नज़र: http://www.codeproject.com/Articles/42764/Regular-Expre ssions-in-MS-SQL-Server-2005-2008 – Mohsen

+0

एक ठीक ** TSQL ** ** + विंडोज एपीआई ** समाधान [रॉबिन पेज और फिल फैक्टर] पर भी है (https: //www.simple-talk। कॉम/एसक्यूएल/टी-एसक्यूएल-प्रोग्रामिंग/tsql-regular-expression-workbench /) जो [VBScript.RegExp] पर निर्भर करता है (https://msdn.microsoft.com/en-us/library/ee236360%28v=vs। 84% 29.aspx) कक्षा, जिसे मैं मानता हूं, विंडोज 2000 के बाद से प्रत्येक विंडोज संस्करण पर भेज दिया जाता है। –

+0

यदि आपको पूरी तरह से टीएसक्यूएल के माध्यम से रेगेक्स की आवश्यकता है, तो SQL सर्वर 2016 और उसके बाद का विकल्प [आर सेवाओं का उपयोग करें] (https : //stackoverflow.com/questions/194652/sql-server-regular-expressions-in-t-sql/46536661#46536661)। – DMason

उत्तर

64

आप के रूप में आप LIKE उपयोग कर सकते हैं, प्रबंधित कोड के साथ बातचीत करने की जरूरत नहीं है:

CREATE TABLE #Sample(Field varchar(50), Result varchar(50)) 
GO 
INSERT INTO #Sample (Field, Result) VALUES ('ABC123 ', 'Do not match') 
INSERT INTO #Sample (Field, Result) VALUES ('ABC123.', 'Do not match') 
INSERT INTO #Sample (Field, Result) VALUES ('ABC123&', 'Match') 
SELECT * FROM #Sample WHERE Field LIKE '%[^a-z0-9 .]%' 
GO 
DROP TABLE #Sample 

आप के साथ '%[^a-z0-9 .][^a-z0-9 .]%'

संपादित जा सकते हैं अपने अभिव्यक्ति + साथ समाप्त होता है के रूप में: बनाने के लिए स्पष्ट: SQL सर्वर प्रबंधित कोड के बिना नियमित अभिव्यक्तियों का समर्थन नहीं करता है। स्थिति के आधार पर, LIKE ऑपरेटर एक विकल्प हो सकता है, लेकिन इसमें नियमित अभिव्यक्ति प्रदान करने वाली लचीलापन की कमी है।

+5

@ माइकयुंग, आप सही हैं। यह उत्तर '{1,2}' के रूप में गलत तरीके से '+ 'क्वांटिफ़ायर को संबोधित करता है जब इसे इसे' {1,} 'के रूप में लेना चाहिए। आश्चर्य की बात है, यह ओपी के लिए काम किया। –

+1

यह एसक्यूएल सर्वर में काम नहीं करेगा क्योंकि यह regex का समर्थन नहीं करता है। – VVN

+5

@VVN, 'LIKE' regex नहीं है (यह एक सीमित सीमित पैटर्न-मिलान वाक्यविन्यास है), इसलिए रेगेक्स समर्थन की कमी का यह मतलब नहीं है कि यह काम नहीं करेगा। –

5

आपको एक सीएलआर प्रक्रिया बनाना होगा जो this article चित्रों के रूप में regex कार्यक्षमता प्रदान करता है।

+0

यह क्लासिक एएसपी में है, क्या यह समर्थन करता है? मुझे लगता है कि सीएलआर केवल .NET कार्यों के लिए है, है ना? –

+4

सीएलआर प्रक्रियाओं को SQL सर्वर वातावरण में स्थापित किया गया है और किसी भी अन्य संग्रहीत प्रक्रिया या उपयोगकर्ता द्वारा परिभाषित फ़ंक्शन की तरह बुलाया जा सकता है, इसलिए यदि क्लासिक एएसपी संग्रहीत प्रक्रिया या उपयोगकर्ता द्वारा परिभाषित फ़ंक्शन का आह्वान कर सकता है, तो यह एक सीएलआर प्रक्रिया का आह्वान कर सकता है। – mwigdahl

1
SELECT * from SOME_TABLE where NAME like '%[^A-Z]%' 

या AZ

के बजाय कुछ अन्य अभिव्यक्ति
5
आप ओले स्वचालन प्रक्रियाओं की आवश्यकता होगी Julio's answer.

-- MS SQL using VBScript Regex 
-- select dbo.RegexReplace('aa bb cc','($1) ($2) ($3)','([^\s]*)\s*([^\s]*)\s*([^\s]*)') 
-- $$ dollar sign, $1 - $9 back references, $& whole match 

CREATE FUNCTION [dbo].[RegexReplace] 
( -- these match exactly the parameters of RegExp 
    @searchstring varchar(4000), 
    @replacestring varchar(4000), 
    @pattern varchar(4000) 
) 
RETURNS varchar(4000) 
AS 
BEGIN 
    declare @objRegexExp int, 
     @objErrorObj int, 
     @strErrorMessage varchar(255), 
     @res int, 
     @result varchar(4000) 

    if(@searchstring is null or len(ltrim(rtrim(@searchstring))) = 0) return null 
    set @result='' 
    exec @res=sp_OACreate 'VBScript.RegExp', @objRegexExp out 
    if(@res <> 0) return '..VBScript did not initialize' 
    exec @res=sp_OASetProperty @objRegexExp, 'Pattern', @pattern 
    if(@res <> 0) return '..Pattern property set failed' 
    exec @res=sp_OASetProperty @objRegexExp, 'IgnoreCase', 0 
    if(@res <> 0) return '..IgnoreCase option failed' 
    exec @res=sp_OAMethod @objRegexExp, 'Replace', @result OUT, 
     @searchstring, @replacestring 
    if(@res <> 0) return '..Bad search string' 
    exec @res=sp_OADestroy @objRegexExp 
    return @result 
END 

की

थोड़ा संशोधित संस्करण एसक्यूएल में चालू की गई:

exec sp_configure 'show advanced options',1; 
go 
reconfigure; 
go 
sp_configure 'Ole Automation Procedures', 1; 
go 
reconfigure; 
go 
sp_configure 'show advanced options',0; 
go 
reconfigure; 
go 
+2

बीटीडब्लू, कैश की तुलना में रेगेक्स ऑब्जेक्ट को नष्ट करने और पुन: उपयोग करने के लिए यह बहुत तेज है। हमने ऑब्जेक्ट का पुन: उपयोग करने में काफी अधिक संख्या के साथ 10,000 तुलना की। –

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