Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Développement SQL Server Discussion :

Transformer un regex en like SQL


Sujet :

Développement SQL Server

  1. #1
    Rédacteur/Modérateur

    Transformer un regex en like SQL
    Bonjour,

    j'ai une combinaison un peu complexe pour moi à adapter en SQL pour de m'affranchir d'une dll.

    Sauriez vous me dire comment je peux transformer ce regex en SQL Server svp ?

    ^([0-9]+)(ER|ERE|E|È|EME|RE|re|ème|e|er|ère){1}[ -]*(.*)$
    Le code d'origine en vb.net étant le suivant :
    Code vb :Sélectionner tout -Visualiser dans une fenêtre à part
    Return Regex.IsMatch(a, "^([0-9]+)(ER|ERE|E|È|EME|RE|re|ème|e|er|ère){1}[ -]*(.*)$", RegexOptions.IgnoreCase)


    je bute sur la bonne approche pour le + et les |.

    Merci pour vos idées
    Cycle de vie d'un bon programme :
    1/ ca fonctionne 2/ ca s'optimise 3/ ca se refactorise

    Pas de question technique par MP, je ne réponds pas

    Apprendre à programmer avec Access 2016 et Access 2019

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  2. #2
    Membre averti
    Bonjour bonjour

    Il est peut-être trop tard mais voila un début d'exemple si besoin :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    DECLARE @test TABLE ( rankT VARCHAR(255) )
     
    INSERT  INTO @test
    VALUES  ( '1ER' ),
            ( '1ERE' ),
            ( '1AZFE' ),
    		('2EME'),
    		('3EME'),
    		('4ef'),
    		('EME')
     
    -- SELECT 'invalid.com'
    SELECT * FROM @test WHERE rankT LIKE '[0-9][ER|ERE|E|È|EME|RE|re|ème|e|er|ère]%';


    Je dois avouer ne pas trop saisir la suite de votre regex n'ayant pas l'habitude d'en faire

    Bisous bisous

  3. #3
    Rédacteur/Modérateur

    Salut,

    c'est effectivement un début, l'idée étant de pouvoir déterminer si on a par exemple
    1ère rue
    1998ème rang
    33e avenue

    etc.

    Donc un nombre suivi d'un suffixe de dénombrement, un espace et autre chose après...

    Merci
    Cycle de vie d'un bon programme :
    1/ ca fonctionne 2/ ca s'optimise 3/ ca se refactorise

    Pas de question technique par MP, je ne réponds pas

    Apprendre à programmer avec Access 2016 et Access 2019

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  4. #4
    Membre averti
    Alors juste rajouter ce petit bout de code j'imagine :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    SELECT * FROM @test WHERE rankT LIKE '[0-9][ER|ERE|E|È|EME|RE|re|ème|e|er|ère]% %_%';

  5. #5
    Expert éminent
    Bon courage avec des adresses genre « 3564 18th avenue »
    les règles du forum - mode d'emploi du forum
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    JE NE RÉPONDS PAS aux questions techniques par message privé.

  6. #6
    Rédacteur/Modérateur

    Salut 7gyY9w1ZY6ySRgPeaefZ

    dans mon cas, c'est seulement le nom de la rue que je cherche à analyser, le numero civique est dans un autre champ
    Cycle de vie d'un bon programme :
    1/ ca fonctionne 2/ ca s'optimise 3/ ca se refactorise

    Pas de question technique par MP, je ne réponds pas

    Apprendre à programmer avec Access 2016 et Access 2019

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  7. #7
    Modérateur

    Citation Envoyé par Jean-Philippe André Voir le message
    Bonjour,

    j'ai une combinaison un peu complexe pour moi à adapter en SQL pour de m'affranchir d'une dll.
    Est-ce qu'on parle d'une fonction CLR ? Car si c'est le cas, ça semble pourtant la solution optimale pour ce type de problématique.

    Quel est le but de s'en affranchir ?

  8. #8
    Rédacteur/Modérateur

    Salut,

    c'est que j'ai réussi à transformer toute une autre palanquée de code en SQL, et qu'il ne me reste plus que cette fonction qui me pose soucis
    Cycle de vie d'un bon programme :
    1/ ca fonctionne 2/ ca s'optimise 3/ ca se refactorise

    Pas de question technique par MP, je ne réponds pas

    Apprendre à programmer avec Access 2016 et Access 2019

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  9. #9
    Membre averti
    Bonjour bonjour,

    Question bête mais, j'ai renvoyé un select qui devrait correspondre à vos besoin. Est-ce le cas ? Si non, sauriez vous me dire pourquoi ?

    Bisous bisous

  10. #10
    Modérateur

    @JeanYvette, le SELECT ne correspond pas exactement...

    Il renvoie la ligne '4ef', ce qui n'est as priori pas désiré mais surtout ne renverra pas les lignes avec des nombre a plusieurs chiffres, par exemple "38éme ..."


    Pour avoir un réel équivalent à l'expression rationnelle, il faudra je pense obligatoirement passer par une série de LIKE pour couvrir tous les cas, voire même d'autres vérification à base de CHARINDEX ou autre, bref, une série de filtres assez complexe, et au final probablement peu efficace.

  11. #11
    Rédacteur/Modérateur

    Salut,

    c'était ma conclusion pour l'instant, donc ca me conforte dans l'idée que garder la dll fera l'affaire.

    Je laisse le bug ouvert jusqu'à vendredi, pour d'éventuelles autres suggestions

    Merci à tous
    JP
    Cycle de vie d'un bon programme :
    1/ ca fonctionne 2/ ca s'optimise 3/ ca se refactorise

    Pas de question technique par MP, je ne réponds pas

    Apprendre à programmer avec Access 2016 et Access 2019

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos