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

SQL Firebird Discussion :

Sélectionner uniquement des champs numériques


Sujet :

SQL Firebird

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Avatar de JP.NUAGE
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    780
    Détails du profil
    Informations personnelles :
    Âge : 83
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 780
    Par défaut Sélectionner uniquement des champs numériques
    Bonjour à tous

    Je travaille avec Firebird 2.1. J'ai "hérité" d'une base contenant une table ARTICLE. Cette table contient, entre autres informations, la taille de l'article. Le champ est déclaré Varchar et peut contenir des valeurs numériques (25.5, 140,...) ou alphabétiques (XXL, L,M, ...) ou autres (24M, 25P65 ,....).

    Existe-t-il une fonction ou une séquence de code qui me permettrait dans un select de ne récupérer que les lignes dont le champ TAILLE ne contient que des des valeurs numériques ? Un peu l'équivalent de IsNumeric

    ....et qui ne soit pas une usine à gaz

  2. #2
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 662
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 662
    Billets dans le blog
    65
    Par défaut
    Bonjour,

    Il y a SIMILAR TO, un équivalent pauvre des expressions régulières, pour ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT r.CODE_ART,r.TAILLE_LOC
    FROM ART_LOC r
    WHERE R.TAILLE_LOC SIMILAR TO '[0123456789.]*'
    NB. bien sûr on peut réduire en longueur 'fixe' en utilisant SIMILAR TO '[0123456789.]{4}'
    ou 'variable' SIMILAR TO ''[0123456789.]{1,4}'
    et compresser un peu l'expression [0123456789.] = [0-9.] ou encore [[:DIGIT:].]Edit : SIMILAR TO est du Firebird 2.5

    Il doit y avoir moyen en utilisant EXECUTE BLOCK (flamerobin)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    SET TERM !;
    EXECUTE BLOCK RETURNS (CODE VARCHAR(6),TAILLE VARCHAR(20)) 
    AS 
    DECLARE VARIABLE N NUMERIC(15,4);
    BEGIN
    FOR SELECT CODE_ART_LOC,TAILLE_LOC FROM ART_LOC INTO :CODE,:TAILLE DO
     BEGIN
      N=CAST(:TAILLE AS NUMERIC(15,4));
      IF (N>0) THEN SUSPEND; 
      WHEN ANY DO N=0;  
     END
    END!

  3. #3
    Membre éclairé
    Avatar de JP.NUAGE
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    780
    Détails du profil
    Informations personnelles :
    Âge : 83
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 780
    Par défaut
    Heureusement SergioMaster que tu as ajouté le petit edit. J'avais trouvé SIMILAR, mais j'avais aussi trouvé le refus de Firebird 2.1

    Maintenant, j'ai une question toute simple : peut-il y avoir dans la clause when l'appel à une procédure du style

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    when PROC(a.TAILLE ) = 0
    La procédure PROC testant la zone et renvoyant 0 si la zone ne contient aucun caractère alpha ?

  4. #4
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 662
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 662
    Billets dans le blog
    65
    Par défaut
    Je n'ai pas tout compris à cette "proc" mais je dirais non.
    Pour info le EXECUTE BLOCK fonctionnera en 2.1

  5. #5
    Membre éclairé
    Avatar de JP.NUAGE
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    780
    Détails du profil
    Informations personnelles :
    Âge : 83
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 780
    Par défaut
    Je pars sur une autre piste : créer un fonction. J'ai trouvé des exemples de création d'une DLL avec Kylix et une avec Windows. En principe, je devrais y arriver, mais j'ai un doute. Voici le code de la fonction que je veux créer et ensuite des explications

    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    library DLL;
     
    uses
      SysUtils,
      Classes;
     
    {$R *.res}
     
    function ISALPHA (TAILLE : string) : integer;
    var i : integer;
         x : string;
    begin
      result := 0;
      i := strlen(PChar(TAILLE));
      while (i > 0) do
         begin
            x := substr( TAILLE, i, 1);  <======
            if  ((x >= 'A') and
                (x <= 'Z')) then
               exit;
            if ((x >= 'a') and
                (x <='z')) then
               exit;
            i := i -1;
         end
       result := 1;
    end;
    begin
    end.
    Je me suis inspiré d'un exemple sous windows. Autant strlen() existe en Delphi, autant substr n'existe pas. Cette fonction existe dans un répertoire à moi. Faire la liaison ne me pose pas de problème : un copier coller dans le répertoire de la DLL et un uses bien placé et cela devrait faire, mais puis-je faire cela dans le cas d'une DLL ?

  6. #6
    Membre éclairé
    Avatar de JP.NUAGE
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    780
    Détails du profil
    Informations personnelles :
    Âge : 83
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 780
    Par défaut
    Apparemment, ma question est sans objet, quoique...

    Maintenant j'ai un autre souci : je ne peux pas la tester. En effet, voici un code tout simple mis dans une procédure

    [QUOTE]

    J'ai un beau message

    STRLEN : tocken unknown
    ce qui est incompréhensible, puisque j'ai récupéré strlen par Ctrl+Espace et que j'ai une autre procédure qui l'utilise depuis bientôt dix ans ! Alors lorsque j'utilise isalpha j'ai le même message et je ne peux aller plus loin

    Petite précision : ISALPHA est bien dans la liste des fonctions de ma base

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

Discussions similaires

  1. jQuery sélectionner uniquement des lettres
    Par ceweb dans le forum jQuery
    Réponses: 3
    Dernier message: 23/12/2013, 15h14
  2. Format des champs numériques
    Par Stane dans le forum Forms
    Réponses: 4
    Dernier message: 07/07/2010, 10h54
  3. Longueur réelle des champs numériques
    Par nenekes dans le forum Cobol
    Réponses: 6
    Dernier message: 23/10/2009, 10h53
  4. Réponses: 4
    Dernier message: 20/02/2007, 16h50
  5. PROBLEME : Forcer la saisie des Champs numériques!!!!!
    Par Grozeil dans le forum Balisage (X)HTML et validation W3C
    Réponses: 7
    Dernier message: 31/03/2005, 15h22

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