2010-09-01 6 views
0

je la chaîne suivante dans la base de données:Obtenir T-SQL en utilisant les expressions régulières

SET @Value = "[4888378977CA4A5] Test String" 

En outre, le @Value peut aussi avoir « RE: » au début de la chaîne tels que:

SET @Value = "RE: [4888378977CA4A5] Test String" 

Comment puis-je accéder à la partie 4888378977CA4A5 de la chaîne en utilisant des expressions régulières?

Merci!

+0

Quelle langue utilisez-vous pour regex? – Oded

+0

Désolé, j'ai oublié de mentionner, 'RE:' peut également parfois apparaître au début de la chaîne (cela va être un sujet d'e-mail qui doit être détecté). Je vais l'ajouter à ma question. – Curt

Répondre

3

T-SQL n'a pas de support d'expressions régulières natif. Vous pouvez utiliser a CLR function pour accéder à la fonctionnalité .NET regex ou utiliser PatIndex si le motif est simple. Ou si vous voulez juste obtenir le contenu de [...] peut-être CharIndex fonctionnerait.

;with strings as 
(
SELECT 'no match' AS string UNION ALL 
SELECT '[4888378977CA4A5] Test String' UNION ALL 
SELECT 'RE: [Other Value] Test String' 
) 
select substring(string, 
      charindex('[',string)+1, 
      charindex(']',string, charindex('[',string))-charindex('[',string)-1) 
                      AS result 
from strings 
where string like '%/[%/]%' ESCAPE '/' 

Retours

result 
----------------------------- 
4888378977CA4A5 
Other Value 
+0

ce n'est pas regex, mais il a résolu mon problème, alors merci Martin :) – Curt

1

This est une façon de le faire dans SQL Server 2000 à l'aide VBScript.RegExp.

Toutefois, dans SQL Server 2005 et SQL Server 2008, il est préférable d'utiliser la bibliothèque .NET Regex, comme illustré dans here.

0

L'expression régulière serait \[([A-Z0-9]+)\]. L'extraction de la sous-chaîne dans le groupe capturé dépend de votre saveur regex. Il pourrait être $1, \1, match.groups(1) etc.

Questions connexes