Existe-t-il une bibliothèque d'expressions régulières écrite en T-SQL (pas de CLR, pas de SP
T-SQL étendu et pur) pour SQL Server, et qui devrait fonctionner avec l'hébergement partagé?
Éditer:
- Merci, je sais sur
PATINDEX
,LIKE
,xp_
sps
et des solutions CLR - Je sais aussi que ce n'est pas le meilleur endroit pour les regex, la question est théorique :)
- La fonctionnalité réduite est également acceptée
sql-server
regex
tsql
xnagyg
la source
la source
SAFE
et non marqués comme l'unEXTERNAL_ACCESS
ou l' autre ouUNSAFE
(car je comprends pourquoi ces 2 derniers ensembles d'autorisations seraient problématiques pour un environnement d'hébergement partagé). Microsoft Azure SQL Database V12 (c'est-à-dire la nouvelle version de fin 2014), qui est un environnement partagé, autorise les assemblys marqués commeSAFE
(et chargés viaFROM 0x...
plutôt qu'à partir d'une DLL car vous ne pouvez pas télécharger une DLL). MaisSAFE
c'est tout ce qui est nécessaire pour les expressions régulières et BEAUCOUP d'autres fonctions très utiles.Réponses:
Que diriez - vous de la PATINDEX fonction?
La correspondance de modèles dans TSQL n'est pas une bibliothèque regex complète, mais elle vous donne les bases.
(À partir de livres en ligne)
la source
LIKE
a pris en charge tout ce qu'ilPATINDEX
fait. Je ne sais pas avant ça ...%
correspond à 0 ou plusieurs caractères (peu importe), ne[...]
correspond qu'à un seul et il n'y a rien entre les deux.Si quelqu'un est intéressé par l'utilisation de regex avec CLR, voici une solution. La fonction ci-dessous (C # .net 4.5) renvoie un 1 si le modèle correspond et un 0 si le modèle ne correspond pas. Je l'utilise pour marquer des lignes dans les sous-requêtes. L'attribut SQLfunction indique au serveur SQL que cette méthode est l'UDF réelle que le serveur SQL utilisera. Enregistrez le fichier en tant que dll dans un endroit où vous pouvez y accéder à partir du studio de gestion.
Dans Management Studio, importez le fichier dll via la programmation - Assemblys - Nouvel assemblage
Ensuite, exécutez cette requête:
Ensuite, vous devriez avoir un accès complet à la fonction via la base de données dans laquelle vous avez stocké l'assembly.
Ensuite, utilisez dans des requêtes comme ceci:
la source
Il existe des correspondances de motifs de base disponibles via l'utilisation de LIKE, où% correspond à n'importe quel nombre et combinaison de caractères, _ correspond à n'importe quel caractère et [abc] peut correspondre à a, b ou c ... Il y a plus d'informations sur le site MSDN .
la source
Si vous utilisez SQL Server 2016 ou version ultérieure, vous pouvez utiliser
sp_execute_external_script
avec R. Il a des fonctions pour les recherches d'expressions régulières, telles quegrep
etgrepl
.Voici un exemple d'adresses e-mail. Je vais interroger certaines «personnes» via le moteur de base de données SQL Server, transmettre les données de ces personnes à R, laisser R décider quelles personnes ont des adresses électroniques non valides et demander à R de renvoyer ce sous-ensemble de personnes à SQL Server. Les «personnes» proviennent de la
[Application].[People]
table de la[WideWorldImporters]
base de données exemple. Ils sont transmis au moteur R en tant que dataframe nomméInputDataSet
. R utilise la fonction grepl avec l'opérateur "not" (point d'exclamation!) Pour trouver quelles personnes ont des adresses e-mail qui ne correspondent pas au modèle de recherche de chaîne RegEx.Notez que les fonctionnalités appropriées doivent être installées sur l'hôte SQL Server. Pour SQL Server 2016, il s'appelle «Services SQL Server R». Pour SQL Server 2017, il a été renommé «SQL Server Machine Learning Services».
Conclusion L'implémentation de SQL par Microsoft (T-SQL) n'a pas de support natif pour RegEx. Cette solution proposée peut ne pas être plus souhaitable pour l'OP que l'utilisation d'une procédure stockée CLR. Mais cela offre un moyen supplémentaire d'aborder le problème.
la source
Au cas où quelqu'un d'autre se pencherait encore sur cette question, http://www.sqlsharp.com/ est un moyen gratuit et facile d'ajouter des fonctions d' expressions régulières CLR dans votre base de données.
la source
Vous pouvez utiliser les fonctionnalités d'expression régulière VBScript à l'aide d'OLE Automation. C'est bien mieux que la surcharge de création et de maintenance d'un assemblage. Veuillez vous assurer de parcourir la section des commentaires pour obtenir une version mieux modifiée de la version principale.
http://blogs.msdn.com/b/khen1234/archive/2005/05/11/416392.aspx
Si vous obtenez une
SQL Server blocked access to procedure 'sys.sp_OACreate'...
erreur, utilisezsp_reconfigure
pour activerOle Automation Procedures
. (Oui, malheureusement, c'est un changement au niveau du serveur!)Plus d'informations sur la
Test
méthode sont disponibles iciBon codage
la source