web-dev-qa-db-fra.com

Existe-t-il un opérateur ou un moyen simple de faire correspondre une ou plusieurs expressions avec l'opérateur LIKE en SQL?

Par exemple, si j'exécute la requête suivante, l'expression dans la clause WHERE ne correspondra qu'à la première lettre avant un nombre, mais existe-t-il un moyen de faire correspondre d'abord une ou plusieurs lettres (par exemple, dans le cas où il y a un nombre variable de lettres avant le nombre dans le champ sur lequel je filtre)?

SELECT FilteredField
FROM Table
WHERE FilteredField LIKE '[a-zA-Z][0-9]'

Exemples de données:

  1. ABC9
  2. DEF2
  3. GH7
  4. Z1
  5. XYH2

Essentiellement, je recherche l'équivalent SQL Server 2016 de RegEx + lorsque j'utilise l'opérateur LIKE.

4
J.D.

Si vous parlez de résoudre ce problème uniquement dans Transact-SQL, vous pouvez couvrir tous ces cas dans vos données d'exemple avec le filtre suivant:

WHERE FilteredField LIKE '%[a-zA-Z][0-9]'

Si vous souhaitez en outre stipuler que tous les caractères avant le chiffre doivent être des lettres latines, vous devrez faire preuve d'un peu de créativité:

WHERE FilteredField     LIKE           '%[a-zA-Z][0-9]'
  AND FilteredField NOT LIKE '%[^a-zA-Z]%[a-zA-Z][0-9]'

En gros, vous dites:

La valeur doit se terminer par une lettre et un chiffre, mais tout ce qui précède la lettre ne doit pas être une non-lettre.

Il n'y a aucun moyen de spécifier cela avec une seule condition en utilisant uniquement la syntaxe intégrée, si c'est ce que vous recherchiez.

12
Andriy M

Comme l'a dit mustaccio dans les commentaires:

Y a-t-il quelque chose qui vous empêche d'utiliser une implémentation d'expression régulière appropriée au lieu d'essayer de pirater LIKE?

Il y a une option pour utiliser CLR, Common Language Runtime, en gros vous créez des fonctions C #, et vous les importez dans votre serveur SQL, à partir de là, vous pouvez simplement appeler une fonction SQL, et il exécutera votre code C # pour vous.

Cela vous offre naturellement toutes les possibilités que vous avez dans regex .NET, directement depuis votre SSMS.

Il y a une tonne de ressources différentes sur la façon de procéder.
Assemblage regex de porte rouge
Exemple de projet de code

3
Yannick Liekens