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 23/11/2011, 14h42   #1
Invité régulier
 
fontaine - statut doré - pièces
jARdinaJ - ArTista - PeinturA - PoéZie - mUzICa
Inscription : septembre 2010
Messages : 56
Détails du profil
Informations personnelles :
Nom : fontaine - statut doré - pièces

Informations professionnelles :
Activité : jARdinaJ - ArTista - PeinturA - PoéZie - mUzICa
Secteur : Arts - Culture

Informations forums :
Inscription : septembre 2010
Messages : 56
Points : 6
Points : 6
Par défaut Conversion de varchar en entier

bonjour,

comment convertir des varchar en entier ?

Citation:
select replace( substr( DMOF, instr(DMOF,'rato')+8, (instr(DMOF,'FN')-1) - (instr(DMOF,'rato')+7) ),'', null )
from PPM_P where IDEN='383545';
affiche 16
c 'est à dire
Citation:
replace( substr( DMOF, instr(DMOF,'rato')+8, (instr(DMOF,'FN')-1) - (instr(DMOF,'rato')+7) ),'', null ) est égal à 16
mais pourquoi alors çà ne marche pas quand je fais

Citation:
select DMOF from PPM_P
where IDEN='383545' and
replace( substr( DMOF, instr(DMOF,'rato')+8, (instr(DMOF,'FN')-1) - (instr(DMOF,'rato')+7) ),'', null )=16;
ou

Citation:
select DMOF from PPM_P
where IDEN='383545' and
replace( substr( DMOF, instr(DMOF,'rato')+8, (instr(DMOF,'FN')-1) - (instr(DMOF,'rato')+7) ),'', null )='16';
j'ai toujours ce message

Citation:
ORA-00936: missing expression
sincères mercis
lastmagik
lastmagik est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/11/2011, 15h32   #2
Expert Confirmé
 
Avatar de 7gyY9w1ZY6ySRgPeaefZ
 
Homme
dba
Inscription : juillet 2007
Messages : 2 523
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Canada

Informations professionnelles :
Activité : dba

Informations forums :
Inscription : juillet 2007
Messages : 2 523
Points : 3 972
Points : 3 972
un élément de réponse
__________________
les règles du forum - mode d'emploi du forum
Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs.
(Rappel : "ça ne marche pas" n'est pas un message d'erreur)
JE NE RÉPONDS PAS aux questions techniques par message privé.
Écrire en français sur un forum est une marque minimale de respect.
7gyY9w1ZY6ySRgPeaefZ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/11/2011, 15h36   #3
Modérateur
 
Avatar de al1_24
 
Homme Alain
Ingénieur d'études décisionnel
Inscription : mai 2002
Messages : 4 446
Détails du profil
Informations personnelles :
Nom : Homme Alain
Âge : 51
Localisation : France, Val de Marne (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études décisionnel
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 4 446
Points : 7 547
Points : 7 547
Si tu nous précisais la structure de la colonne dont tu veux extraire cet entier, ce serait sans doute plus facile pour t'aider.
__________________
Modérateur Langage SQL
Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
N'oubliez pas le bouton et pensez aux balises [code]
Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
al1_24 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/11/2011, 15h42   #4
McM
Expert Confirmé Sénior
 
Inscription : juillet 2003
Messages : 3 440
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 3 440
Points : 4 183
Points : 4 183
Pas d'idée sur le message d'erreur, la requête est lancée telle quelle en sql+ ou sous sqldev ou toad ?

Le replace (..., '', NULL) ne sert à rien

Qu'est ce qu'il y a dans dmof pour cette ligne ?
Code :
1
2
3
SELECT dmof, SUBSTR( DMOF, INSTR(DMOF,'rato')+8, (INSTR(DMOF,'FN')-1) - (INSTR(DMOF,'rato')+7) ) AS rpl
FROM PPM_P 
WHERE IDEN='383545'
__________________
More Code : More Bugs. Less Code : Less Bugs
McM est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/11/2011, 09h07   #5
Invité régulier
 
fontaine - statut doré - pièces
jARdinaJ - ArTista - PeinturA - PoéZie - mUzICa
Inscription : septembre 2010
Messages : 56
Détails du profil
Informations personnelles :
Nom : fontaine - statut doré - pièces

Informations professionnelles :
Activité : jARdinaJ - ArTista - PeinturA - PoéZie - mUzICa
Secteur : Arts - Culture

Informations forums :
Inscription : septembre 2010
Messages : 56
Points : 6
Points : 6
Par défaut suite réponses

bonjour,

merci de avoir lu mon méssage.

al1_24 >
Citation:
Name Type
DMOF VARCHAR2(300)
McM >
Code :
1
2
3
4
5
6
7
8
9
10
11
12
 
SQL> SELECT DMOF FROM PPM_P WHERE IDENT='3545';
 
DMOF
--------------------------------------------------------------------------------
RD
   30/06/2011 f
                14/05/2009 l
                             -999999999 rat_idx 16 FN 3 FD
                                                           10/06/2011 las
t_notif
        30/06/2011 ac 0 sc_num 71795718434700
Citation:
SQL> select replace( substr( DMOF, instr(DMOF,'rat_idx')+8, (instr(DMOF,'FN')-1) - (instr(DMOF,'rat_idx')+7) ),'', null ) as sali from PPM_P where IDENT='3545';

SALI
--------------------------------------------------------------------------------
16
en effet
Code :
1
2
 
REPLACE( substr( DMOF, instr(DMOF,'rat_idx')+8, (instr(DMOF,'FN')-1) - (instr(DMOF,'rat_idx')+7) ),'', NULL ) AS sali
est censé retourner la valeur de 16 mais je souhaite qu il soit typé en entier.
C'est pour pouvoir mieux le manipuler et surtout pour faire comparer pour la condition where sali=16

sincères mercis
lasmagik
lastmagik est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/11/2011, 18h03   #6
Membre Expert
 
Femme
Ingénieur développement logiciels
Inscription : juin 2007
Messages : 480
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France, Ain (Rhône Alpes)

Informations professionnelles :
Activité : Ingénieur développement logiciels

Informations forums :
Inscription : juin 2007
Messages : 480
Points : 1 024
Points : 1 024
Bonjour,

Le problème vient du fait que la chaîne contient un espace à la fin.
Pour le voir, il suffit de faire
Code :
SELECT '>' || REPLACE( substr( DMOF, instr(DMOF,'rat_idx')+8, (instr(DMOF,'FN')-1) - (instr(DMOF,'rat_idx')+7) ),'', NULL ) || '>' AS sali...
Le résultat est La bonne syntaxe pour obtenir 16 sans espace à la fin est
Code :
REPLACE( substr( DMOF, instr(DMOF,'rat_idx')+8, (instr(DMOF,'FN')-1) - (instr(DMOF,'rat_idx')+8) ),'', NULL ) AS sali
tedo01 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 25/11/2011, 08h48   #7
Invité régulier
 
fontaine - statut doré - pièces
jARdinaJ - ArTista - PeinturA - PoéZie - mUzICa
Inscription : septembre 2010
Messages : 56
Détails du profil
Informations personnelles :
Nom : fontaine - statut doré - pièces

Informations professionnelles :
Activité : jARdinaJ - ArTista - PeinturA - PoéZie - mUzICa
Secteur : Arts - Culture

Informations forums :
Inscription : septembre 2010
Messages : 56
Points : 6
Points : 6
Par défaut re formulation de la question

bonjour à tous et à tedo01,

merci tedo01 tu as raison il y a un espace

mais avec :
Code :
1
2
 
SELECT SLAM FROM PPM_P WHERE IDENT='3545';
ce qui m'interresse c'est que avec quelle commande je dois faire pour enlever tous les espaces dans SLAM.

une fois les espaces enlevés j'ai '4518' mais en tant que chaîne de caractères.

et ensuite comment '4518' convertir en entier 4518.

Code :
1
2
3
4
5
6
 
 
SELECT 
to_number( REPLACE( SLAM ,'', NULL ) ) 
FROM PPM_P 
WHERE IDENT='3545';
mais çà ne marche pas que dois je faire pour enlever les espaces, et ensuite faire la conversion en entier ?

sincères mercis
lastmagik
lastmagik est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/11/2011, 09h20   #8
Membre Expert
 
Inscription : août 2008
Messages : 1 271
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 1 271
Points : 1 929
Points : 1 929
Et avec trim ?
skuatamad est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/11/2011, 12h09   #9
Invité régulier
 
fontaine - statut doré - pièces
jARdinaJ - ArTista - PeinturA - PoéZie - mUzICa
Inscription : septembre 2010
Messages : 56
Détails du profil
Informations personnelles :
Nom : fontaine - statut doré - pièces

Informations professionnelles :
Activité : jARdinaJ - ArTista - PeinturA - PoéZie - mUzICa
Secteur : Arts - Culture

Informations forums :
Inscription : septembre 2010
Messages : 56
Points : 6
Points : 6
bonjour skuatamad,

j'ai fait la commande suivante et cela ne marche pas

Code :
1
2
3
4
5
6
7
 
 
SQL> SELECT trim ('  12 3  4 5  6 7') FROM dual;
 
TRIM('1234567'
--------------
12 3  4 5  6 7
peut-être il faut d'abord convertir la chaîne ' 12 3 4 5 6 7' en type que trim peut traiter ?

quel type et comment convertir ?

sincères remerciements
lastmagik
lastmagik est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/11/2011, 13h39   #10
Membre Expert
 
Avatar de pacmann
 
Homme Pacman Pacman
Business analyst
Inscription : juin 2004
Messages : 1 417
Détails du profil
Informations personnelles :
Nom : Homme Pacman Pacman
Âge : 31
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Business analyst
Secteur : Finance

Informations forums :
Inscription : juin 2004
Messages : 1 417
Points : 2 309
Points : 2 309
Salut !

Code :
1
2
 
SELECT to_number(REPLACE('1 2 3 4', ' ', '')) FROM dual
__________________

(c'est ma photo)
Paku, Paku !
Pour les jeunes incultes : non, je ne suis pas un pokémon...

Le pacblog : http://pacmann.over-blog.com/
pacmann est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/11/2011, 11h58   #11
Invité régulier
 
fontaine - statut doré - pièces
jARdinaJ - ArTista - PeinturA - PoéZie - mUzICa
Inscription : septembre 2010
Messages : 56
Détails du profil
Informations personnelles :
Nom : fontaine - statut doré - pièces

Informations professionnelles :
Activité : jARdinaJ - ArTista - PeinturA - PoéZie - mUzICa
Secteur : Arts - Culture

Informations forums :
Inscription : septembre 2010
Messages : 56
Points : 6
Points : 6
Par défaut meme formule mais différente réponse

bonjour à tou et à pacmann,

je fais les fonctions REPLACE et TO_NUMBER mais elles ne marchent sur la table PPM. Pourtant elles marchent très bien avec dual.

dessous, on voit bien que les espaces sont bien enlevées
Code :
1
2
3
4
5
6
 
SQL> SELECT '>' || REPLACE( substr('123456 89  1 23',6,7) ,' ','' ) || '<' AS sali FROM dual;
 
SALI
------
>6891<
dessous, on voit que les espaces ne sont pas enlevées
Code :
1
2
3
4
5
6
7
8
9
10
11
 
SQL> SELECT '>' || REPLACE( 
substr( DMOF, instr(DMOF,'rat_idx')+7, (instr(DMOF,'FN')-1) 
         - (instr(DMOF,'rat_idx')+6) ) ,' ', '') || '<' 
AS sali 
FROM PPM 
WHERE IDEN='3545';
 
SALI
-----------------
> 16 <

pour to_number c'est aussi la même chose

dessous on voit bien que to_number marche
Code :
1
2
3
4
5
6
 
SQL> SELECT to_number( REPLACE( substr('123456 89  1 23',6,7) ,' ','' ) ) AS sali FROM dual;
 
      SALI
----------
      6891
dessous, premierement on va isoler 16
Code :
1
2
3
4
5
6
7
8
9
10
 
SQL> SELECT '>' || 
substr( DMOF, instr(DMOF,'rat_idx')+7+1, (instr(DMOF,'FN')-1-1-1) 
                  - (instr(DMOF,'rat_idx')+6) )  || '<' AS sali 
FROM PPM 
WHERE IDENT='3545';
 
SALI
--------------------------------------------------------------------------------
>16<
deuxiement nous allons enlever > et <
Code :
1
2
3
4
5
6
7
8
9
10
11
 
SQL> SELECT 
substr( DMOF, 
instr(DMOF,'rat_idx')+7+1, (instr(DMOF,'FN')-1-1-1) -   (instrDMOF,'rat_idx')+6) )   
AS sali 
FROM PPM 
WHERE IDENT='3545';
 
SALI
--------------------------------------------------------------------------------
16
maintenant je vais faire to_number et ça ne marche pas

Code :
1
2
3
4
5
6
7
8
9
10
11
12
 
 
SQL> SELECT 
to_number( substr( DMOF, instr(DMOF,'rat_idx')+7+1, 
               (instr(DMOF,'FN')-1-1-1) - (instr(DMOF,'rat_idx')+6) ) )
AS sali 
FROM PPM 
WHERE IDENT='3545';
 
                  *
ERROR at line 1:
ORA-01722: invalid number
rappelons que
Code :
1
2
3
 
Name                             Type
DMOF                             VARCHAR2(300)
ma conclusion est la replace et to_number marchent bien mais pas pour le champ DMOF de ma la table PPM.

merci beaucoup
lastmagik
lastmagik est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/11/2011, 19h22   #12
Modérateur
 
Homme Fabien
Ingénieur d'études en décisionnel
Inscription : septembre 2008
Messages : 5 686
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 34
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études en décisionnel
Secteur : Arts - Culture

Informations forums :
Inscription : septembre 2008
Messages : 5 686
Points : 10 431
Points : 10 431
Envoyer un message via ICQ à Waldar Envoyer un message via Skype™ à Waldar
La colonne IDENT est de quel type ?

N'oubliez pas que Oracle agit comme il veut.
Il peut très bien essayer de faire le to_number AVANT de faire le filtre.

Ça signifie que sur toutes les lignes de votre table, cette partie de la chaîne doit être numérique.

Comme ce n'est probablement pas le cas, il vaut mieux travailler en chaîne de caractère.

Si j'ai bien suivi, essayez ainsi :
Code :
1
2
3
4
SELECT DMOF
  FROM PPM_P
 WHERE IDEN = '383545'
   AND substr(DMOF, instr(DMOF,'rato')+8, (instr(DMOF,'FN')-1) - (instr(DMOF,'rato')+7) ) LIKE '%16%';
Pour votre cas particulier, vous être probablement en face d'un espace insécable (alt+0160) ou un autre caractère qui ressemble à un espace mais qui n'est pas un espace :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
WITH SR AS
(
SELECT chr(49824) || 'CAS1' || chr(49824) AS col FROM dual union ALL
SELECT chr(   32) || 'CAS2' || chr(   32)        FROM dual
)
SELECT col
     , '>' ||         col           || '<' AS rs1
     , '>' || REPLACE(col, ' ', '') || '<' AS rs2
  FROM SR;
 
COL    RS1      RS2                       
------ -------- --------------------------
 CAS1  > CAS1 < > CAS1 <                  
 CAS2  > CAS2 < >CAS2<
__________________
Email : http://scr.im/waldar
Waldar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/11/2011, 08h17   #13
Invité régulier
 
fontaine - statut doré - pièces
jARdinaJ - ArTista - PeinturA - PoéZie - mUzICa
Inscription : septembre 2010
Messages : 56
Détails du profil
Informations personnelles :
Nom : fontaine - statut doré - pièces

Informations professionnelles :
Activité : jARdinaJ - ArTista - PeinturA - PoéZie - mUzICa
Secteur : Arts - Culture

Informations forums :
Inscription : septembre 2010
Messages : 56
Points : 6
Points : 6
Par défaut liste des caractères insécables

bonjour à tous et à waldar,

merci waldar pour ta réponse.
oui j'ai essayé les codes que tu m'as proposé ils m'ont beaucoup aidé.

Code :
1
2
3
 
chr(49824)
chr(   32)
mais est ce que tu peux me donner la liste des espaces insécables :

j'ai fait l'éxperience il suffit de faire la commande

Code :
1
2
 
REPLACE(DMOFIELD,chr(49824),'')
et l'espace insecable est remplacé.

mais est ce que tu pourras me donner la liste des code des espaces et des espaces insécables car je n'ai pas encore réussi quelle est le code de l'espace à remplacer.
et je vais essayer une à une les code avec la fonction replace

sincères mercis
lastmagik
lastmagik est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/11/2011, 10h17   #14
Modérateur
 
Homme Fabien
Ingénieur d'études en décisionnel
Inscription : septembre 2008
Messages : 5 686
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 34
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études en décisionnel
Secteur : Arts - Culture

Informations forums :
Inscription : septembre 2008
Messages : 5 686
Points : 10 431
Points : 10 431
Envoyer un message via ICQ à Waldar Envoyer un message via Skype™ à Waldar
Avec tous les encodages qui existent, je ne pense pas qu'une telle liste existe.
Utilisez la solution avec le like pour votre problème, le replace n'est pas la bonne solution.
__________________
Email : http://scr.im/waldar
Waldar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/12/2011, 07h46   #15
Invité régulier
 
fontaine - statut doré - pièces
jARdinaJ - ArTista - PeinturA - PoéZie - mUzICa
Inscription : septembre 2010
Messages : 56
Détails du profil
Informations personnelles :
Nom : fontaine - statut doré - pièces

Informations professionnelles :
Activité : jARdinaJ - ArTista - PeinturA - PoéZie - mUzICa
Secteur : Arts - Culture

Informations forums :
Inscription : septembre 2010
Messages : 56
Points : 6
Points : 6
Par défaut solution trouvée

bonjour à tous et à waldar,

grâce à vos aides précieuses j'ai réussi à trouver la solution.
il suffit tout simplement de mettre un à un dans la fonction ascii les caractères un par un, pour savoir leurs code ascii.

merci beaucoup à tous et à vos interventions précieuses et utiles

Code :
1
2
 
SELECT ascii('A') FROM dual;
sincères remerciements
lastmagik
lastmagik est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/12/2011, 09h54   #16
Membre Expert
 
Femme
Ingénieur développement logiciels
Inscription : juin 2007
Messages : 480
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France, Ain (Rhône Alpes)

Informations professionnelles :
Activité : Ingénieur développement logiciels

Informations forums :
Inscription : juin 2007
Messages : 480
Points : 1 024
Points : 1 024
Bonjour,
En complément, la fonction DUMP permet de trouver le code ascii de plusieurs caractères en une fois :
Code :
SELECT DUMP('abcdef') FROM DUAL
donne :
Code :
1
2
3
4
5
 
DUMP('ABCDEF')                    
----------------------------------
Typ=96 Len=6: 97,98,99,100,101,102
1 row selected.
tedo01 est déconnecté   Envoyer un message privé Réponse avec citation 20
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 14h40.


 
 
 
 
Partenaires

Hébergement Web