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

Autres SGBD Discussion :

[Teradata] - Expression régulière pour déterminer suite de chiffres ou caractères identiques


Sujet :

Autres SGBD

  1. #1
    Nouveau candidat au Club
    Homme Profil pro
    Développeur décisionnel
    Inscrit en
    Juillet 2018
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur décisionnel

    Informations forums :
    Inscription : Juillet 2018
    Messages : 1
    Par défaut [Teradata] - Expression régulière pour déterminer suite de chiffres ou caractères identiques
    Bonjour,

    Sous Teradata, je souhaiterai mettre en place une requête permettant de vérifier si le champ Field d'une longueur de 9 caractères d'une table T :
    - est composé d'une suite de chiffres ou de caractères identiques (exemple : 000000000, 111111111, aaaaaaaaa, BBBBBBBBB, ....)
    - contient un caractère accentué

    Concernant le critère "est composé d'une suite de chiffres ou de caractères identiques (exemple : 000000000, 111111111, aaaaaaaaa, BBBBBBBBB, ....)", j'ai pensé à utiliser la fonction regexp_similar de la manière suivante :
    regexp_similar(T.Field, '[0-9]{9}') or regexp_similar(upper(T.Field), '[A-Z]{9}')
    mais cela vérifie uniquement si le champ Field contient 9 chiffres ou 9 caractères et pas si ces chiffres/caractères sont identiques.
    Je n'ai pas réussi à trouver la syntaxe exacte permettant de vérifier si ces chiffres/caractères sont identiques.

    Pourriez-vous m'aider svp pour déterminer la syntaxe à utiliser pour les 2 critères ci-dessus (suite de chiffres/caractères identiques et présence d'un caractère accentué) ?

    Merci d'avance.

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 134
    Par défaut
    Partant de ton expression, je te propose :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    regexp_similar(T.Field, '[' || SUBSTRING(T.Field FROM 1 FOR 1) || ']{9}')
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  3. #3
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 997
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 997
    Billets dans le blog
    6
    Par défaut
    Pas besoin d'une expression régulières lourde et peu performante. Le LIKE et une UDF suffit.

    L'UDF :
    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
    18
    19
    CREATE FUNCTION test.REPLICATE (datum VARCHAR(32), len smallint)
    RETURNS VARCHAR(8000)
          LANGUAGE SQL
          DETERMINISTIC
          CONTAINS SQL
          SPECIFIC test.myudf
          RETURNS NULL ON NULL INPUT
          SQL SECURITY DEFINER
          COLLATION INVOKER
          INLINE TYPE 1
    Declare i int;
    Declare outval VARCHAR(8000);
    set i = 1;
    set outval = '';
    WHILE i <= len DO
       SET outval = outval || datum;
       SET i = i + 1;
       END WHILE;
    RETURN outval;
    La formule magique :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MACOLONNE LIKE test.REPLICATE(SUBSTRING(MACOLONNE, 1, 1), CHARACTER_LENGTH(MACOLONNE))
    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

Discussions similaires

  1. [RegEx] Expression régulière pour supprimer des doublons
    Par cbroissa dans le forum Langage
    Réponses: 5
    Dernier message: 20/05/2017, 01h59
  2. [RegEx] Expression régulière pour trouver des mots
    Par cbroissa dans le forum Langage
    Réponses: 7
    Dernier message: 26/05/2006, 23h39
  3. [RegEx] Simple expression régulière pour ereg_replace
    Par aurapp dans le forum Langage
    Réponses: 6
    Dernier message: 12/03/2006, 12h34
  4. Expression régulière pour récupérer le nom d'un fichier
    Par calimero2611 dans le forum Langage
    Réponses: 5
    Dernier message: 24/02/2006, 19h00
  5. Expression Régulière pour float
    Par zebiloute dans le forum Langage
    Réponses: 5
    Dernier message: 26/09/2005, 14h03

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