IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
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 :

fonction "Regex like"


Sujet :

Développement SQL Server

  1. #1
    Modérateur

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Avril 2007
    Messages
    1 996
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 996
    Points : 3 102
    Points
    3 102
    Par défaut fonction "Regex like"
    Bonjour à tous,

    j'ai ce matin dû écrire une petite fonction scalaire basique qui avait pour objectif de vérifier qu'une chaîne de caractère est bien conforme à un pattern.

    Le pattern en question est le suivant : ^[A-Z]{2}[0-9]{2}[A-Z]{4}$ (AB01ABAB = OK, 01AB0101 = NOK)

    Je n'avais pas la possibilité de passer par une UDF CLR (pas de Visual Studio). J'ai donc construit ma fonction sur une suite de clauses IF ISNUMERIC SUBSTRING sur ma chaîne.

    Existe-t-il sur avec SQL Server un moyen de tester des chaînes de caractères avec des expressions régulières ? A priori, non ?
    Dans tous les cas, quelles solutions de contournement utilisez-vous ?

    D'avance merci

  2. #2
    Membre averti
    Homme Profil pro
    R&D
    Inscrit en
    Avril 2004
    Messages
    127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : R&D

    Informations forums :
    Inscription : Avril 2004
    Messages : 127
    Points : 406
    Points
    406
    Par défaut
    Citation Envoyé par calagan99 Voir le message
    Personne n'a de proposition ?
    Si, utilise patindex()
    http://msdn.microsoft.com/fr-fr/library/ms188395.aspx

    En bas de cette page :
    [ ] (Caractère générique - recherche de correspondance de caractère(s)) (Transact-SQL)
    [^] (Caractères génériques à ne pas faire correspondre - Transact-SQL)
    _ (Caractère générique - recherche de correspondance d'un seul caractère) (Transact-SQL)
    % (Un ou plusieurs caractères génériques dont la correspondance est recherchée) (Transact-SQL)

  3. #3
    Modérateur

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Avril 2007
    Messages
    1 996
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 996
    Points : 3 102
    Points
    3 102
    Par défaut
    Merci pour le conseil.
    Je ne connaissais pas la fonction PATINDEX.

    Est-ce que je me plante si je pars sur ce type d'utilisation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    IF PATINDEX('%[A-Z][A-Z]%', SUBSTRING(@Param,1,2)) = 1
    BEGIN
    IF PATINDEX('%[0-9][0-9]%', SUBSTRING(@Param,3,2)) = 1
    BEGIN
    IF PATINDEX('%[A-Z][A-Z][A-Z][A-Z][A-Z][A-Z]%', SUBSTRING(@Param,5,6)) = 1
    RETURN 1
    END

  4. #4
    Membre actif
    Inscrit en
    Janvier 2012
    Messages
    145
    Détails du profil
    Informations forums :
    Inscription : Janvier 2012
    Messages : 145
    Points : 226
    Points
    226
    Par défaut
    Je ne m'y connais pas trop en expressions régulières, mais si tu fais un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT monChamp
    FROM maTable
    WHERE monChamp LIKE '[A-Z][A-Z][0-9][0-9][A-Z][A-Z][A-Z][A-Z]'
    ça ne marche pas? Voir la MSDN pour plus d'infos.

  5. #5
    Modérateur

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Avril 2007
    Messages
    1 996
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 996
    Points : 3 102
    Points
    3 102
    Par défaut
    Euh, non, ça ne va pas marcher puisque l'expression régulière ne sera pas évaluée comme une expression régulière mais comme une simple chaine de caractère.

  6. #6
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    En êtes-vous certain ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    With Tmp (col) as
    (
    select 'AB01ABAB' union all
    select '01AB0101'
    )
    select col
         , case
             when col like '[A-Z][A-Z][0-9][0-9][A-Z][A-Z][A-Z][A-Z]'
             then 1
             else 0
           end as res
      from Tmp
     
    col      res
    -------- -----------
    AB01ABAB 1
    01AB0101 0

  7. #7
    Modérateur

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Avril 2007
    Messages
    1 996
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 996
    Points : 3 102
    Points
    3 102
    Par défaut
    @Waldar : Alors là, je tombe des nues!
    Vous auriez l'explication de ce fonctionnement qui m'était totalement inconnu ?

    @KookieMonster : désolé, j'étais à mille lieues de penser que ta suggestion fonctionnerait.

  8. #8
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Points : 12 371
    Points
    12 371
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    LIKE '[A-Z][A-Z][0-9][0-9][A-Z][A-Z][A-Z][A-Z]'
    [A-Z] indique que l'on cherche un seul caractère alphabétique "compris" entre A et Z.
    Donc il faut le répéter autant de fois que l'on cherche de caractères.

    Identiquement, [0-9] indique un seul caractère numérique, compris entre 0 et 9.

    Pour allez plus loin avec LIKE, la doc

    @++

  9. #9
    Modérateur

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Avril 2007
    Messages
    1 996
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 996
    Points : 3 102
    Points
    3 102
    Par défaut
    Bon, 5 ans que je manipule au quotidien SQL Server. Je suis content quelque part d'en apprendre encore

    Merci pour l'info.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Regex - Double quotes - Coloration syntaxique
    Par ToxiZz dans le forum ASP.NET
    Réponses: 2
    Dernier message: 29/04/2008, 01h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo