|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Membre du Club
![]() |
J'aimerai faire une requête utilisant les expression régulière mais je connais pas la syntaxe exacte : j'ai mis ça :
Code :
|
||
|
|
00
|
|
|
#2 |
|
Membre du Club
![]() Inscription : décembre 2002 Messages : 82 ![]() |
Bonjour,
Personne n'a encore répondu donc je vais tenter de t'aider au mieux. Chez moi la fonction me retourne : 'RegexSelectAll' is not a recognized built-in function name. Visiblement ce n'est pas une fonction SQL Server ou alors utilisable avec d'autres librairies, je ne sais pas. Les expressions régulières s'utilisent dans tes prédicats : Code :
WHERE EMAIL LIKE '% ton_expression_régulière %' Maintenant, pour essayer de nettoyer ou mettre en forme ton champ EMAIL, j'utiliserais les fonction etc ... En espérant avoir pu t'orienter dans ta recherche. Cdt, |
|
|
00
|
|
|
#3 |
|
Expert Confirmé
![]() ![]() |
Bonjour,
en effet, SQL Server ne supporte pas les expressions rationnelles, tu as juste un LIKE à disposition, avec une syntaxe sommaire. Tu peux faire des expressions rationnelles en développant toi-même une fonction en .NET et en l'intégrant dans SQL Server. Attention, les performances ne seront pas terribles. Tu as ici un article pour t'aider.
__________________
Rudi Bruchez Consultant indépendant modélisation, administration, optimisation, formation, solutions MS SQL Server et informatique libre. MCDBA, MCITP, MCT, SCJP2 - http://www.babaluga.com/ Articles et tutoriels : http://rudi.developpez.com/ LIVRE : Optimiser SQL Server |
|
|
00
|
|
|
#4 |
|
Membre du Club
![]() |
Merci à tous pour vos réponses : je ne peux pas rajouter de fonction .NET, d'une je ne sais pas faire, et de deux je n'ai pas les droits.
En fait je voulais juste faire en sorte que je puisse bien avoir des adresses emails valides pour mon emailing : en fait je fais le traitement sur deux BD, une sous Oracle et l'autre sous SQL Server. J'ai fait la manip sur Oracle et c'est bien pratique de traiter l'info en amont directement dans la requête et je voulais faire pareil sur Sql Server : il y a un t'il un moyen via un script SQL genre un trigger ? |
|
|
00
|
|
|
#5 | ||
![]() ![]() ![]() Frédéric BROUARDExpert SGBDR & SQL Inscription : mai 2002 Messages : 10 959 ![]() |
comme indiqué, il faut passer par une fonction SQL CLR développée en .net. MS en fournit une toute faite.
Par sécurité, la config du serveur interdit l'utilisation de SQL CLR, mais il suffit de reconfigurer cela par : Code :
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/ Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp. Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation * * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * * |
||
|
00
|
|
|
#6 |
|
Membre Expert
![]() ![]() |
Permettez-moi de rebondir sur ce sujet.
Actuellement la plupart des SGBDs ont intégré de façon native la gestions des expressions régulières. Après hésitation ORACLE l'à finalement introduit depuis sa version 10G. Et aujourd’hui en 2011 MS n'a pas jugé bon d'intégrer ces fonctions dans son SGBD ! et demande aux utilisateurs de créer des fonctions CLRs. Donc de faire un peu de code .NET et de le déployer dans SQL Server ! Qu'est ce que sa coûte à MS t'intégrer de façon native : la gestion des expressions régulières ? |
|
00
|
|
|
#7 | |
|
Membre du Club
![]() Inscription : décembre 2002 Messages : 82 ![]() |
Citation:
|
|
|
|
00
|
|
|
#8 |
|
Membre Expert
![]() ![]() |
Espérons que la prochaine version de SQL SERVER prenne en compte ce besoin. Et ce n'est pas le seul ...
|
|
00
|
|
|
#9 |
![]() ![]() ![]() Frédéric BROUARDExpert SGBDR & SQL Inscription : mai 2002 Messages : 10 959 ![]() |
Vous avez tort, car une implémentation SQL CLR est plus rapide que ce que pourrait faire du Transact SQL. Pour être efficace cela devrait être réalisé sous forme de DLL C... Ce qui revient à utiliser le SQL CLR, mais avec l'avantage considérable du code "managé" (géré en .net) qui est bien plus sécurisé que le C !!!
En effet en cas de mauvaise conduite de la DLL, il n'y a pas contamination de l’existence de SQL Server, ce qui est possible avec un langage comme C ou C++ C'est pourquoi il est beaucoup plus sûr et rationnel de faire cela en .net. Ceux qui vous interdisent d'utiliser SQL CLR sont des imbéciles qui n'ont rien compris de l'intérêt de .net dans ce cas de figure... En sus sachez que SQL Server utilise .net sans vous le dire pour le type Hierrachyid comme pour les types geometry et geography du SIG intégré depuis la version 2008... A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/ Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp. Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation * * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * * |
|
00
|
|
|
#10 |
|
Membre du Club
![]() |
Merci beaucoup pour vos réponses, vraiment chapeau bas pour votre expertise : bon du coup, dans mon cas je fais quoi, en vous rappelant que je ne connais pas du tout .NET et j'ai travaillé il y a bien longtemps sur SQL Server, et ça commence à dater maintenant, pour être sûr que je remonte bien des emails et pas autre chose ?
|
|
|
00
|
|
|
#11 |
![]() ![]() ![]() Frédéric BROUARDExpert SGBDR & SQL Inscription : mai 2002 Messages : 10 959 ![]() |
Microsoft vous donne un DLL toute faite. Il n'y a qu'a l'intégrer sous forme d'Assembly en faisant
CREATE ASSEMBLY... Puis à partir de cette assembly créer la fonction CREATE FUNCTION ... AS EXTERNAL NAME <method_specifier> A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/ Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp. Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation * * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * * |
|
00
|
|
|
#12 | ||
|
Membre Expert
![]() ![]() |
Citation:
Citation:
Ce qui constitue à mon avis une perte de temps, donc perte de productivité... D'où ma question initiale : Qu'est ce ça coûte à MS t'intégrer de façon native la gestion des expressions régulière dans son SGBD ? |
||
|
00
|
|
|
#13 |
![]() ![]() ![]() Frédéric BROUARDExpert SGBDR & SQL Inscription : mai 2002 Messages : 10 959 ![]() |
1) il n'est pas possible d'utiliser toutes les fonctionnalité d'une REGEX classique dans un SGBDR. En effet une REGEX comme GREP est dédié à la recherche d'éléments littéraux dans des fichiers et non dans des tables.
2) certaines possibilités des REGEX classiques n'ont pas de sens dans une recherche dans une table car une table n'est pas constitué que de littéraux... Il y a aussi des dates, des chiffres. 3) pour ce faire la norme SQL a précisé une fonction particulière de nom SIMILAR qui est décrite dans mon bouquin sur SQL. Elle n'est aujourd'hui implémenté que très rarement ! Conclusion : vous seriez frustré de n'avoir la possibilité que d'un seul choix de fonction d'expression régulière, alors que cela dépend des cas de figure... A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/ Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp. Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation * * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * * |
|
00
|
|
|
#14 | |||
|
Membre Expert
![]() ![]() |
Citation:
REGEXP_LIKE(mycolonne, pattern) REGEXP_SUBSTR(mycolonne, pattern, position, occurrence) REGEXP_REPLACE(mycolonne, pattern, remplacement, position, occurrence) REGEXP_INSTR(mycolonne, pattern, position, occurrence, return) avec ces fonctions il n'y a plus de limite ....car on peut mettre en oeuvre toutes les possibilités avec les pattern Citation:
Citation:
Désolé bpdelavega je vais me rattraper sur un autre sujet A+ |
|||
|
00
|
|
|
#15 |
|
Membre du Club
![]() |
Non au contraire, merci de m'avoir répondu zinzineti, je vais essayer de faire ce que vous m'avez dit, je vous fais un retour dès que possible, j'ai dû interrompre ces travaux pour en faire d'autres, donc j'ai pas encore eu le temps de m'y remettre.
|
|
|
00
|
|
|
#16 |
![]() ![]() Administrateur de base de données Inscription : août 2007 Messages : 1 159 ![]() |
Mon ami Google m'a repondu a la question "regex sql server clr":
http://msdn.microsoft.com/en-us/magazine/cc163473.aspx - Lien 1 http://www.simple-talk.com/sql/t-sql...er-by-example/ - Lien 2. Je pense qu'avec un peu de lecture et de copier coller, il sera facile d'integrer les regex a votre DB. |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com