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 :

Interval d'élément dans une restriction [Fait]


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Avril 2008
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 53
    Par défaut Interval d'élément dans une restriction
    Bonjour,
    Voila que je travail avec oracle et je rencontre un souci.
    Je possède une table avec un champ Reference.
    Ce champs peut comporter tout type d'information, il s'agit d'un varchar.
    Seulement voila, je souhaite récupérer uniquement les champs dont les 2 premiers caracteres sont compris entre 1 et 13.
    Existe-t-il une syntaxe pour faire ca?
    Merci pour votre aide.

  2. #2
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 953
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 953
    Par défaut
    Salut,

    Tu peux essayer avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    to_number(substr(tonchamp,1,2)) between 1 and 13

  3. #3
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par skuatamad Voir le message
    Salut,

    Tu peux essayer avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    to_number(substr(tonchamp,1,2)) between 1 and 13
    Oui mais il faut gérer le cas où les deux premiers caractères ne sont pas des chiffres.

  4. #4
    Invité
    Invité(e)
    Par défaut
    une méthode pas forcément la plus habile mais qui marche est d'utiliser cette fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    create or replace FUNCTION ISNUMERIC ( X IN VARCHAR2) RETURN NUMBER IS
    nb number;
    begin
     nb := to_number(substr(tonchamp,1,2));
     return nb;
    exception
     when others then
     return 0;
    end;
    et de lancer cette requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select *
    from ma_table 
    where ISNUMERIC(tonchamp) BETWEEN 1 AND 13 ;

  5. #5
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 953
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 953
    Par défaut
    Merci Jerome pour la rectification, j'avais pas testé, et effectivement ça plante.
    Donc j'ai fait quelques tests et en fait il faudrait être encore moins subtil pour couvrir tous les cas :

    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
     
    CREATE OR REPLACE FUNCTION ISNUMERIC2 ( X IN VARCHAR2) RETURN NUMBER IS
    nb number;
    begin
     nb := to_number(substr(X,1,2));
     RETURN nb;
    exception
     when others then
    	begin
    		nb := to_number(substr(X,1,1));
    		return nb;
    		exception
     			when others then	
     				RETURN 0;
    	end;
    end;
    et les tests :

    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
     
    SQL> select * from test_o;
     
    C
    ----------
    abcdefgh
    5erftu
    05erftu
    10jfjfhrt
     
     
    SQL> select * from test_o where to_number(substr(c,1,2)) between 1 and 13;
    select * from test_o where to_number(substr(c,1,2)) between 1 and 13
                                         *
    ERREUR � la ligne 1 :
    ORA-01722: Nombre non valide
     
     
    SQL> select * from test_o where substr(c,1,2) between '1' and '13';
     
    C
    ----------
    10jfjfhrt
     
    SQL> select * from test_o where ISNUMERIC(c) BETWEEN 1 AND 13 ;
     
    C
    ----------
    05erftu
    10jfjfhrt
     
    SQL> select * from test_o where ISNUMERIC2(c) BETWEEN 1 AND 13 ;
     
    C
    ----------
    5erftu
    05erftu
    10jfjfhrt
    Evidemment toute proposition subtile est la bien venue

  6. #6
    Membre averti
    Inscrit en
    Avril 2008
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 53
    Par défaut
    Merci pour vos réponse.
    N'existe-t-il pas un élément comme dans SQL serveur "Like '[1-13]' " sous oracle?

  7. #7
    Expert confirmé Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    SQL> r
      1  select *
      2    from test_o
      3*  where regexp_like(a,'(^[1-9][^0-9]|^1[0-3]|^0[1-9])')
     
    A
    --------------------
    5erftu
    05erftu
    10jfjfhrt

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 14/09/2005, 13h39
  2. contrôler l'absence d'un élément dans une liste donnée
    Par gendalf37 dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 12/09/2005, 10h02
  3. ajout éléments dans une balise select
    Par wehtam dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 18/08/2005, 14h03
  4. [CR 10] Centrer verticalement un élément dans une boîte
    Par Giovanny Temgoua dans le forum SAP Crystal Reports
    Réponses: 10
    Dernier message: 07/04/2005, 14h25

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