Créer SQL "AIMEZ" la Déclaration qui ressemble à des Modèles spécifiques de chiffres et de lettres
Est-il possible d'utiliser, COMME dans une requête SQL pour rechercher des modèles de lettres et de chiffres. J'ai besoin de localiser tous les enregistrements où le champ spécifique de données a le motif (2 Chiffres,1 tiret, 3 Lettres) ## - AAA je suis l'aide de SSMS avec SQL Server 2008. Toute aide serait appréciée. MERCI.
Je pense que vous aurez besoin d'expressions régulières. Oracle a
REGEXP_LIKE
fonction qui est tout comme l'utilisation de LIKE
, mais avec une expression régulière. Malheureusement, je ne pense pas que MS SQL Server a toute fonction similaire, donc je pense que vous pourriez avoir à écrire une procédure pour l'aider.OriginalL'auteur user234872 | 2010-06-16
Vous devez vous connecter pour publier un commentaire.
Je pense que
LIKE '%[0-9][0-9]-[A-Z][A-Z][A-Z]%'
devrait fonctionner.Je ne suis pas sûr de votre affaire exigences en matière de sensibilité, mais vous pouvez coller ASSEMBLER en tant que ci-dessous.
OriginalL'auteur Martin Smith
Vous devez également être en mesure d'accomplir ceci avec PATINDEX.
Pourquoi
PATINDEX
et pasLIKE
? À l'aide deLIKE
est beaucoup plus lisible, à mon humble avis.Il est un autre, non-CLR solution au même problème.
Je n'ai pas vu
PatIndex
avant. Merci pour étendre mes connaissancesOriginalL'auteur Thomas
Si les données sont exactement les "##-AAA", vous pouvez simplement utiliser
LIKE '[0-9][0-9]-[A-Z][A-Z][A-Z]'
. Si les données que contient cette séquence, quelque part, l'utilisationLIKE '%[0-9][0-9]-[A-Z][A-Z][A-Z]%'
.Noter que si la colonne est indexée,
LIKE '[0-9][0-9]-[A-Z][A-Z][A-Z]'
peut être beaucoup plus rapide que n'importe quel disque mémoire flash usb ou CLR regex, parce que SQL Server comprendLIKE
mieux, et il peut plus facilement sauter les éléments de l'index si il n'y aurait jamais de match. Par exemple, tous les enregistrements commençant par un caractère en dehors de 0 à 9 seront ignorés immédiatement, alors qu'un UDF ou CLR regex sera encore lire ces valeurs.OriginalL'auteur Ruben
Vous devriez être en mesure d'utiliser un type de recherche. Votre clause where seraient similaires à:
*** Cela suppose un casse classement
OriginalL'auteur G Mastros
Je recommande la création d'un assembly CLR .Net. De cette façon, vous pouvez créer une fonction ou d'une SP qui peuvent utiliser les regex.
http://www.simple-talk.com/sql/t-sql-programming/clr-assembly-regex-functions-for-sql-server-by-example/
Modifier: Même si cela peut être fait via comme indiqué dans d'autres réponses, je voudrais encore vous recommandons la création de l'assemblée. Si vos modifications de données pour une raison et vous avez besoin d'une méthode avancée de la recherche de données, cette regex assemblée serait en mesure d'accueillir le changement
LIKE
si possible sera généralement beaucoup plus rapide, parce qu'il est natif de SQL Server et il peut utiliser les indices de mieux (si vous pouvez éviter une première '%' ou '_').Intéressant. Je vais regarder cela pour une utilisation future. Merci
OriginalL'auteur Chris Klepeis