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 Oracle Discussion :

Test si valeur entière


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé Avatar de pinocchio
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2002
    Messages
    795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2002
    Messages : 795
    Par défaut Test si valeur entière
    Bonjour,
    Comme vu sur ce post, on peut tester aisément si la chaîne de caractère est un number.

    Mon souci est que je souhaite tester si c'est un entier et non un number.
    Si je remplace dans le code ci-dessus le dummy number par dummy integer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    CREATE FUNCTION is_number(p_number VARCHAR2) RETURN NUMBER AS
    dummy integer;
    BEGIN
     
    dummy := TO_NUMBER(p_number);
     
    RETURN 1;
     
    EXCEPTION WHEN OTHERS RETURN 0;
    END;
    /
    cela ne résout pas mon problème.
    Le to_number traduit le number en entier.

    j'ai bien la solution de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select DECODE(TRANSLATE('12345.1','0123456789',' '), NULL, 1,0) into nb from dual;
    mais au niveau optimisation, je ne suis pas sûr que ce soit idéal.
    Qu'en pensez-vous s'il vous plait?
    Cordialement
    Pinocchio

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Un entier ? C'est à dire sans décimale ?
    Il suffit de tester que sa valeur soit égale à sa valeur arrondie :
    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
    With tmp as
    (
    select 1 as col from dual union all
    select 1.76     from dual union all
    select 17.6     from dual union all
    select 176      from dual
    )
    select col, case when col = floor(col) then 'Entier' else 'Non entier' end as int
      from tmp;
     
    COL  INT
    ---- ----------
    1    Entier
    1.76 Non entier
    17.6 Non entier
    176  Entier

  3. #3
    Membre éprouvé Avatar de pinocchio
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2002
    Messages
    795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2002
    Messages : 795
    Par défaut
    Merci.

    En fait, je souhaite vérifier que c'est un nombre et que ce nombre est un entier.

    en effectuant la comparaison avec sa valeur arrondie, cela marche uniquement si je suis sûr que c'est un nombre sinon j'ai une erreur.

    Cependant, je peux ajouter un "exception when others" qui indiquera qu'il y a une erreur de format également.

    il n'existe pas l'équivalent d'un to_number mais n'autorisant pas les décimals?

    Cordialement

  4. #4
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Non, Oracle n'a qu'une seule notion de nombre globale qui lui sert de fourre-tout.
    L'avantage c'est que tous les types nombres sont compatibles entre eux et n'ont pas besoin de conversion (1/2 ça fait 0.5 et pas 0).

    Après il suffit de repartir de votre fonction is_number :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    CREATE or replace FUNCTION is_integer (p_number VARCHAR2)
    RETURN NUMBER AS
    BEGIN
     
    case TO_NUMBER(p_number)
      when floor(TO_NUMBER(p_number))
      then RETURN 1;
      else return 0;
    end case;
     
    EXCEPTION WHEN OTHERS then RETURN 0;
    END;
    /
    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
    WITH tmp AS
    (
    SELECT '1' AS col FROM dual union ALL
    SELECT '1.76'     FROM dual union ALL
    SELECT '17.6'     FROM dual union ALL
    SELECT '176'      FROM dual
    )
    SELECT col, is_integer(col) AS int
      FROM tmp;
     
    COL  INT
    ---- ---
    1      1
    1.76   0
    17.6   0
    176    1

  5. #5
    Membre éprouvé Avatar de pinocchio
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2002
    Messages
    795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2002
    Messages : 795
    Par défaut
    Merci

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

Discussions similaires

  1. radiobutton erreur n'est pas une valeur entière correcte
    Par pierrot67 dans le forum Bases de données
    Réponses: 3
    Dernier message: 12/03/2006, 21h27
  2. erreur '' n'est pas une valeur entière correcte
    Par ffxlenoir dans le forum Langage
    Réponses: 5
    Dernier message: 02/12/2005, 13h57
  3. pb de test si valeur nulle
    Par taurus dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 08/10/2005, 12h16
  4. Réponses: 8
    Dernier message: 11/08/2005, 09h32
  5. test la valeur d'une date dans une requete
    Par TuxP dans le forum Requêtes
    Réponses: 2
    Dernier message: 07/01/2004, 14h53

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