2010-10-21 3 views
2

Je suis un novice à regexs et j'essaie actuellement de trouver une simple regex qui cherche un numéro de série dans le format suivant: 0217103200XX, où "XX" peut chacun est un chiffre numérique. J'utilise SQL Server Management Studio pour passer la regex en tant que paramètre dans une procédure stockée. Je ne suis pas sûr si la syntaxe est différente des autres langages de programmation. J'ai l'expression régulière suivante comme référence: (?: 2328 \ d \ d (?: 0 [1-9] | [1-4] \ d | 5 [0-3]) \ d {4})Regex pour un numéro de série dans T-SQL

Toutes les suggestions sont appréciées. Je l'utilise en fait dans une requête SQL et non dans une application .Net. Le format est le suivant:

USE [MyDB] 

EXEC MyStoredProcedure @regex = '(?:2328\d\d(?:0[1-9]|[1-4]\d|5[0-3])\d{4})' 
+0

SQL Server ne avoir un support natif de regex - vous devez avoir créé un assembly SQLCLR pour exposer la fonctionnalité via .NET. –

+0

@OMG: Il y a aussi xp_pcre (voir cette [vieille réponse] (http://stackoverflow.com/questions/267921/) de moi). Peut-être un peu dépassé de nos jours, mais fonctionne très bien sur l'un de nos serveurs. – Tomalak

+0

@Tomalak: Cool, mais ce n'est pas natif –

Répondre

0

Comme OMG Ponies a déclaré - SQL Server ne prend pas en charge en mode natif regex (besoin d'utiliser SQLCLR pour 2005+ ou xp_cre).

Si je comprends bien votre question, vous pouvez utiliser un PATINDEX pour trouver les numéros de série

Select * 
From dbo.MyTable 
Where PATINDEX('0217103200[0-9][0-9]', SerialNumberColumn) > 0 
+0

Pourquoi pas un simple comme? Je n'utilise presque jamais PATINDEX. Toujours demandé ... – gbn

+1

@gbn - Sans raison, je préfère utiliser PATINDEX. Doit être les parenthèses ou quelque chose ;-) – codingbadger

+0

Merci de m'avoir éclairé. Je n'étais pas assez familier avec SQL Server pour savoir si les RegEx étaient supportés. Après avoir regardé la procédure stockée, il semble que le paramètre regex soit simplement inséré dans la base de données pour référence. – kingrichard2005

1

Utilisez comme: il n'y a pas RegEx natif dans SQL Server

LIKE '0217103200[0-9][0-9]' 
Questions connexes