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 :

utilisation des fonctions de caractère


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Novembre 2007
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 38
    Par défaut utilisation des fonctions de caractère
    bonjour,
    comment faire une requête select sur une table afin qu'elle m'affiche un résultat filtré sur le type des données?

    exemple:
    soit une table contenant 1 seul champ "monchamp" et dont les enregistrements sont de type varchar2 mais dont certaines valeur sont '1', '3'... donc numérique et d'autres "1-A","3B"..etc .

    Je dois ordonne numériquement les lignes de la table en utilisant les "fonctions de caractères";

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    SQL> SELECT * FROM matable;
     
    monchamp
    -
    1
    7
    10
    1-A
    2
    3-B
    3
    43
    etc...
    Dans un autre post, on m'a suggéré d'utiliser Translate:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    SQL> SELECT * FROM matable WHERE translate (monchamp, 'monchamp1234567890', 'monchamp') IS NULL order by to_number(monchamp) asc;
     
    monchamp
    -
    1
    2
    3
    7
    10
    43
    etc..
    donc ok pour afficher et trier les valeurs numériques avec translate.

    Cependant,je ne parviens toujours pas à trouver une solution dès que ce ne sont plus des valeurs numériques !!

    *comment faire pour trier, à partir de cette même table, les valeurs qui ne sont pas numérique?

    *comment trier la table complète (valeur numérique et non numérique mais toutes de type varchar2) ?

  2. #2
    Membre averti
    Inscrit en
    Août 2007
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 20
    Par défaut
    Salut,

    Si toutes tes valeurs alpha ont un format commun avec un '-'
    comme dans 1-A, 1-B etc....

    Tu peux faire un order by avec
    to_number( substr( mon_champ, 1, instr(mon_champ,'-') -1 ) )

    ce qui te permet de ne prendre que la partie de la chaîne qui est avant le caractère '-' et de transformer cette partie en numérique pour faire ton order by.

    En revanche si tu n'as pas de format commun des alphas ça me semble plus difficile.

  3. #3
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    WITH t AS (SELECT '1' AS champ FROM dual 
    UNION ALL SELECT '7' FROM dual
    UNION ALL SELECT '10' FROM dual
    UNION ALL SELECT '1-A' FROM dual
    UNION ALL SELECT '2' FROM dual
    UNION ALL SELECT '3-B' FROM dual
    UNION ALL SELECT '43' FROM dual
    UNION ALL SELECT '3' FROM dual
    UNION ALL SELECT 'B' FROM dual)
    SELECT champ, TO_NUMBER(SUBSTR(champ, 0, LENGTH(champ) -NVL(LENGTH(LTRIM(champ, '0123456789')),0))) AS num,
    			SUBSTR(champ, LENGTH(champ) -NVL(LENGTH(LTRIM(champ, '0123456789')),0)+1) AS car
    FROM t
    ORDER BY TO_NUMBER(SUBSTR(champ, 0, LENGTH(champ) -NVL(LENGTH(LTRIM(champ, '0123456789')),0))), 
    		SUBSTR(champ, LENGTH(champ) -NVL(LENGTH(LTRIM(champ, '0123456789')),0)+1)

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

Discussions similaires

  1. [VB.NET][Excel] utiliser des fonction Excel comme xlToRight
    Par Alexj51 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 01/03/2006, 12h10
  2. [Xml/XSl] utiliser des fonction vb
    Par ekmule dans le forum XSL/XSLT/XPATH
    Réponses: 6
    Dernier message: 17/01/2006, 17h28
  3. [hibernate] utilisation des fonctions d'aggregation
    Par osopardo dans le forum Hibernate
    Réponses: 2
    Dernier message: 29/08/2005, 09h41
  4. utilisation des fonctions d'une dll
    Par jackk dans le forum C++
    Réponses: 14
    Dernier message: 15/06/2005, 16h50
  5. Utiliser des fonctions Pascal
    Par Neilos dans le forum C++Builder
    Réponses: 2
    Dernier message: 07/03/2004, 15h43

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