est-il possible d'utiliser comme dans une requête SQL pour rechercher des modèles de nombres et de lettres. J'ai besoin de localiser tous les enregistrements dans lesquels les données de champ spécifiques ont le motif (2 numéros, 1 trait d'union, 3 lettres) ## - AAA J'utilise SSMS avec SQL Server 2008. Toute aide serait appréciée. Merci. P>
5 Réponses :
Je recommanderais de créer un assemblage CLR avec .NET. De cette façon, vous pouvez créer une fonction ou un SP qui peut utiliser regex. P>
edit strong>: Même si cela peut être fait par comme indiqué dans d'autres réponses, je recommanderais toujours de créer l'Assemblée. Si vos données changent pour une raison quelconque et que vous avez besoin d'une manière avancée de rechercher des données, cet ensemble de regex pourrait accueillir le changement p>
L'utilisation de CLR REGEXES est à peu près surnombre pour cela. En outre, en utilisant un comme code> si possible sera généralement beaucoup plus rapide, car il est originaire de SQL Server et il peut utiliser mieux les index (si vous pouvez empêcher un «%» initial ou «_»).
Intéressant. Je vais examiner cela pour une utilisation future. Merci
Je pense que Je ne suis pas sûr de vos besoins de sensibilité de cas, mais vous pouvez coller une assemblée comme ci-dessous. p> comme '% [0-9] [0-9] - [A-Z] [A-Z] [A-Z]%' code> devrait fonctionner.
select * from
(
SELECT 'GHSASKJK' AS T UNION ALL
SELECT 'HGGH11-ABC' UNION ALL
SELECT 'HGGH11-abc'
) f
WHERE T LIKE '%[0-9][0-9]-[A-Z][A-Z][A-Z]%' COLLATE Latin1_General_CS_AS
Parfait. Il n'y a aucune sensibilité au cas pour cette situation, mais j'apprécie les informations pour une utilisation future. Merci.
Si les données sont exactement "## - AAA", vous pouvez simplement utiliser Notez que si votre colonne est indexée, comme '[0-9] [0-9] - [A-Z] [A-Z] [A-Z]' Code>. Si les données contiennent cette séquence quelque part, utilisez
comme '% [0-9] [0-9] - [A-Z] [A-Z] [A-Z] [A-Z]%' P>. P>.
comme '[0-9] [0-9] - [AZ] [AZ] [AZ] [AZ]' code> peut être Beaucoup EM> plus rapides que n'importe quel UFD ou CLR Regex, car SQL Server comprend mieux code> mieux, et il peut plus facilement ignorer les parties de l'index s'il ne correspondrait jamais. Par exemple, tous les enregistrements commençant par un caractère à l'extérieur de 0-9 seront ignorés immédiatement, alors qu'un REGEX UDF ou CLR sera toujours lu ces valeurs. P>
Vous devriez également être capable d'accomplir cela avec Patindex . < Pré> xxx pré> p>
Pourquoi patindex code> et non
comme code>? Utiliser
comme code> est beaucoup plus lisible, IMHO.
@Ruben - C'est une solution alternative et non CLR au même problème.
Je n'ai pas vu Patindex code> avant. Merci d'avoir développé mes connaissances
Vous devriez pouvoir utiliser une recherche similaire à cela. Votre clause d'où serait similaire à: *** Cela suppose une caisse assume une assiette insensible p> p> p>
Je pense que vous aurez besoin d'expressions régulières pour cela. Oracle a une fonction
regexp_ike code> comme utiliser
comme code>, mais avec une expression régulière. Malheureusement, je ne pense pas que MS SQL Server a une fonction similaire, je pense donc que vous devrez peut-être écrire une procédure pour vous aider.