2010-06-22 6 views
1

J'essaye d'employer la correspondance de modèle de sql pour vérifier si une valeur de chaîne est dans le format correct.Comment vérifier la fin d'une chaîne particulière en utilisant la correspondance de modèle SQL?

Le code de chaîne doit avoir le format correct:

alphanumericvalue.alphanumericvalue

Par conséquent, les éléments suivants sont des codes valides:

D0030.2190 
C0052.1925 
A0025.2013 

Et les éléments suivants sont des codes invalides:

D0030 
.2190 
C0052. 
A0025.2013. 
A0025.2013.2013 

Jusqu'à présent, j'ai le SQL IF c suivant pour vérifier que la chaîne est correcte:

IF @vchAccountNumber LIKE '_%._%[^.]' 

Je crois que la partie "_%" vérifie 1 ou plusieurs caractères. Par conséquent, cette instruction vérifie un ou plusieurs caractères, suivi d'un "." caractère, suivi par un ou plusieurs caractères et en vérifiant que le caractère final n'est pas un ".".

Il semble que cela fonctionnerait pour toutes les combinaisons, sauf pour le format suivant lequel la clause IF permet un code valide:

A0025.2013.2013 

Je vais avoir du mal à corriger cette clause IF pour lui permettre de traiter cette le format est incorrect. Quelqu'un peut-il m'aider à corriger cela?

Merci.

+1

besoin de connaître le fournisseur SQL afin de connaître les capacités correspondant à motif. Par exemple, SQL Server 2005+ a une correspondance de modèle limitée à l'aide de PATINDEX, mais le support de regex nécessite l'utilisation de fonctions CLR ... –

+0

Ce script doit être déployé dans les bases de données SQL Server 2005 et SQL Server 2008. – Dangerous

Répondre

1

Cette stackoverflow question mentionne l'utilisation des limites de mots: [[:<:]] et [[:>:]] pour les mots entiers. Vous pourriez être en mesure d'utiliser cela puisque vous n'avez pas d'espaces dans votre code.

1

Cette solution est ANSI SQL

Cette expression LIKE trouver un modèle pasalphanumeric.alphanumeric. Donc, ne pas aimer trouver que ce qui correspondent que vous le souhaitez:

IF @vchAccountNumber NOT LIKE '%[^A-Z0-9].[^A-Z0-9]%' 

Toutefois, en fonction de vos exemples, vous pouvez utiliser ...

LIKE '[A-Z][0-9][0-9][0-9][0-9].[0-9][0-9][0-9][0-9]' 

... ou un comme ça si vous 5 alphas, dot, 4 alphas

LIKE '[A-Z0-9][A-Z0-9][A-Z0-9][A-Z0-9][A-Z0-9].[A-Z0-9][A-Z0-9][A-Z0-9][A-Z0-9]' 

La 2ème est légèrement plus évidente pour les valeurs de longueur fixe. Le 1er est légèrement moins intuitif mais fonctionne avec un code de longueur variable de chaque côté du point.

Autres SO des questions Creating a Function in SQL Server with a Phone Number as a parameter and returns a Random Number et Best equivalent for IsInteger in SQL Server

Questions connexes