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:
Essentiellement, je recherche l'équivalent SQL Server 2016 de RegEx + lorsque j'utilise l'opérateur LIKE.
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.
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