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

  1. #1
    Nouveau Candidat au Club
    [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

    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}')
    Cette signature n'a pas pu être affichée car elle comporte des erreurs.

  3. #3
    Rédacteur

    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 +
    Cette signature n'a pas pu être affichée car elle comporte des erreurs.