Précédent   Forum des professionnels en informatique > Bases de données > Oracle > SQL
SQL Forum d'entraide sur le SQL pour Oracle
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 19/12/2007, 18h26   #1
Candidat au titre de Membre du Club
 
Inscription : novembre 2007
Messages : 37
Détails du profil
Informations forums :
Inscription : novembre 2007
Messages : 37
Points : 14
Points : 14
Par défaut requete select sur type

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 (type numeric par exemple)?

exemple:
soit une table contenant 1 seul champ id et dont les enregistrements sont de type varchar2 mais dont certaines valeur sont '1', '3'... donc numérique.
ma requête:
select id from essai where type=numeric;
bb5477 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/12/2007, 20h41   #2
Candidat au titre de Membre du Club
 
Inscription : décembre 2006
Messages : 13
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 13
Points : 13
Points : 13
Par défaut Type numérique

bonjour,

comme tu as un mélange de valeures numériques stockées en varchar2 (donc textuelle)... tu dois passer par une fonction plsql.

exemple:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
CREATE FUNCTION is_numeric(str IN varchar2) RETURN number IS
  v_number number(38);
begin
  v_number := to_number(str);
  RETURN 1;
 
exception when value_error then
 
    RETURN 0;
 
end is_numeric;
/
puis tu l'utilise dans ta requête:

select id from essai where 1=is_numeric(id);
philou28 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/12/2007, 03h22   #3
Candidat au titre de Membre du Club
 
Inscription : novembre 2007
Messages : 37
Détails du profil
Informations forums :
Inscription : novembre 2007
Messages : 37
Points : 14
Points : 14
non en fai je dois créer un script SQL qui ordonne les lignes de la table numériquement en utilisant les "character functions";
bb5477 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/12/2007, 09h55   #4
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
As-tu au moins essayé ce qu'il te propose ?
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/12/2007, 11h28   #5
Expert Confirmé Sénior
 
Avatar de mnitu
 
Homme Marius Nitu
Ingénieur développement logiciels
Inscription : octobre 2007
Messages : 3 319
Détails du profil
Informations personnelles :
Nom : Homme Marius Nitu
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 : 3 319
Points : 5 837
Points : 5 837
Citation:
Envoyé par orafrance Voir le message
As-tu au moins essayé ce qu'il te propose ?
Ca ne va pas l'aider par rapport à son besoin! Probablement que ce qu'il a besoin c'est tout simplement d'utiliser LPAD pour faire un tri correctement
mnitu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/12/2007, 11h44   #6
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
pourtant, j'ai du mal à voir la différence entre :
Code :
SELECT id FROM essai WHERE type=numeric;
et

Code :
SELECT id FROM essai WHERE 1=is_numeric(id);
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/12/2007, 11h53   #7
Expert Confirmé
 
Homme
Chef de projet en SSII
Inscription : janvier 2004
Messages : 2 866
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Chef de projet en SSII
Secteur : Conseil

Informations forums :
Inscription : janvier 2004
Messages : 2 866
Points : 3 448
Points : 3 448
Une autre idée, sans créer de fonction :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
SQL> SELECT * FROM t1;
A
-
1
a
2
b
3
 
SQL> SELECT * FROM t1 WHERE translate (a, 'a1234567890', 'a') IS NULL;
A
-
1
2
3
__________________
Un problème sans solution est un problème mal posé

Merci de poser vos questions sur le forum, je ne réponds pas aux questions posées par MP.
plaineR est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/12/2007, 13h52   #8
Expert Confirmé Sénior
 
Avatar de mnitu
 
Homme Marius Nitu
Ingénieur développement logiciels
Inscription : octobre 2007
Messages : 3 319
Détails du profil
Informations personnelles :
Nom : Homme Marius Nitu
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 : 3 319
Points : 5 837
Points : 5 837
Citation:
Envoyé par orafrance Voir le message
pourtant, j'ai du mal à voir la différence entre :
Code :
SELECT id FROM essai WHERE type=numeric;
et

Code :
SELECT id FROM essai WHERE 1=is_numeric(id);
Je pense que quand il dit
Citation:
non en fai je dois créer un script SQL qui ordonne les lignes de la table numériquement en utilisant les "character functions";
Il a besoin en fait de faire de tel sorte que pour les valeurs '1', '10', '2', '22', 'TOTO' il doit les obtenir dans l'ordre '1', '2', '10', '22', 'TOTO'. Peut être je me trompe mais si ce n'est pas le cas, la question a été aussi trés mal formulée.
mnitu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/12/2007, 14h17   #9
McM
Expert Confirmé Sénior
 
Inscription : juillet 2003
Messages : 3 450
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 3 450
Points : 4 209
Points : 4 209
dans ce cas, il peut faire un
Code :
ORDER BY LPAD(champ, 10, '0')
Avec 10 = taille max du champ
__________________
More Code : More Bugs. Less Code : Less Bugs
McM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/12/2007, 14h21   #10
Expert Confirmé Sénior


 
Avatar de laurentschneider
 
Homme Laurent Schneider
Administrateur de base de données
Inscription : décembre 2005
Messages : 2 927
Détails du profil
Informations personnelles :
Nom : Homme Laurent Schneider
Localisation : Suisse

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : Finance

Informations forums :
Inscription : décembre 2005
Messages : 2 927
Points : 4 549
Points : 4 549
Code :
1
2
3
4
5
6
7
8
9
10
11
SELECT id 
FROM essai 
WHERE 
  cast(
    xmlquery(
    'let $i:=if($ID castable as xs:decimal)then "YES" else "NO" return $i' 
    passing id AS id returning content) 
  AS varchar2(3))='YES';
ID
----------
1
ce n'est sûrememt pas le moyen le plus simple ni le plus rapide
__________________
Mon blog : laurentschneider.com
Mon livre : Advanced Oracle SQL Programming
laurentschneider est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/12/2007, 14h27   #11
Candidat au titre de Membre du Club
 
Inscription : novembre 2007
Messages : 37
Détails du profil
Informations forums :
Inscription : novembre 2007
Messages : 37
Points : 14
Points : 14
merci plaineR , en effet c'est ce que je souhaite faire et ça marche!!
bb5477 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/12/2007, 14h58   #12
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
Citation:
Envoyé par laurentschneider Voir le message
ce n'est sûrememt pas le moyen le plus simple ni le plus rapide


c'est beau en tout cas
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/12/2007, 15h08   #13
Candidat au titre de Membre du Club
 
Inscription : novembre 2007
Messages : 37
Détails du profil
Informations forums :
Inscription : novembre 2007
Messages : 37
Points : 14
Points : 14
comment faire si certains enregistrement sont du genre "1-A","3B"..etc ?
en utilisant la méthode de plaineR :
Code :
1
2
 
SELECT * FROM t1 WHERE translate (a, 'a1234567890', 'a') IS NULL ORDER BY 1;
bb5477 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/12/2007, 15h36   #14
Expert Confirmé
 
Homme
Chef de projet en SSII
Inscription : janvier 2004
Messages : 2 866
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Chef de projet en SSII
Secteur : Conseil

Informations forums :
Inscription : janvier 2004
Messages : 2 866
Points : 3 448
Points : 3 448
Citation:
Envoyé par bb5477 Voir le message
comment faire si certains enregistrement sont du genre "1-A","3B"..etc ?
Comme elles ne sont pas numériques elles ne seront pas ramenées. C'est ce que tu veux non ?
__________________
Un problème sans solution est un problème mal posé

Merci de poser vos questions sur le forum, je ne réponds pas aux questions posées par MP.
plaineR est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/12/2007, 15h52   #15
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
par contre ça ne marche qu'avec les entiers
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/12/2007, 17h29   #16
Candidat au titre de Membre du Club
 
Inscription : novembre 2007
Messages : 37
Détails du profil
Informations forums :
Inscription : novembre 2007
Messages : 37
Points : 14
Points : 14
ok pour 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) ?
bb5477 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 07h54.


 
 
 
 
Partenaires

Hébergement Web