|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Membre à l'essai
![]() Inscription : février 2005 Messages : 77 ![]() |
Bonjour
Je m’initie (avec plus ou moins de difficulté mais avec plaisir) depuis quelques temps à requêter des bases Oracles avec SQL_Developper. Voilà qu’aujourd’hui, je suis confronté à un problème, sûrement simple, mais dont je n’arrive pas à trouver la solution. C’est un problème de mise en forme de donnée. Je récupère des valeurs représentant une date mais au format YYYYMMDD (ex : 20111221). Ces valeurs sont insérées dans une table dont le champ est de type Varchar2 (8 byte) L’insertion ne pose aucun problème. Je retrouve bien mes valeurs dans ma table au format YYYYMMDD. Mais je souhaite dans un 1er temps affiché le contenu de ces dates dans un format plus lisible de type DD/MM/YYYY (ex : 21/12/2011) J’ai essayé plusieurs synthaxe avec to_char ou to_date mais rien n’y fait. Par exemple : Code :
Je ne pense pas que la donnée insérée soit en cause car j'ai essayé sur une autre table avec des valeurs que j'ai insérée manuellement et là non plus, rien de rien... J’avoue que je sèche un peu et je ne trouve pas mon erreur dans les tutos du site. Si quelqu’un peut me conseiller, je suis preneur. Bonne journée |
||
|
|
00
|
|
|
#2 | ||
|
Membre Expert
![]() Laure Consultante en Business Intelligence Inscription : avril 2007 Messages : 983 ![]() |
Bonjour,
Tout d'abord tu as une erreur dans ta requête : Code :
Si tu as un affichage vide c'est qu'il n'y a aucune ligne retournée. Peux-tu nous montrer ta requête complète ?
__________________
~ Lola ~ Ne pas oublier : et aussi :
|
||
|
|
00
|
|
|
#3 | |
|
Expert Confirmé Sénior
![]() Inscription : juillet 2003 Messages : 3 440 ![]() |
Citation:
TO_DATE pour transformer une Chaine en Date TO_CHAR pour transformer une Date en Chaine poste le résultat de la requête suivante Code :
SELECT madate, to_date(madate, 'YYYYMMDD') FROM matable WHERE rownum < 10
__________________
More Code : More Bugs. Less Code : Less Bugs |
|
|
|
00
|
|
|
#4 | ||
|
Membre régulier
![]() Inscription : septembre 2008 Messages : 85 ![]() |
Bonjour,
Comme les données d'origine ne sont pas stockées comme des dates, il faut peut être faire 2 conversions : Code :
|
||
|
|
12
|
|
|
#5 |
|
Expert Confirmé Sénior
![]() Inscription : juillet 2003 Messages : 3 440 ![]() |
Oh non !! Jamais de to_date sur une date
__________________
More Code : More Bugs. Less Code : Less Bugs |
|
|
10
|
|
|
#6 | |||
![]() ![]() |
Citation:
Rien n'empêchera d'insérer la donnée 20111313 dans votre varchar. Modifiez votre table, transformez votre colonne au format DATE. Comme suggéré, vous devez faire une double conversion : Code :
__________________
Email : http://scr.im/waldar |
|||
|
10
|
|
|
#7 | ||
|
Membre Expert
![]() Laure Consultante en Business Intelligence Inscription : avril 2007 Messages : 983 ![]() |
Autant pour moi, j'ai lu trop vite et n'avais pas bien vu le format de la colonne.
Par curiosité : est-il possible de faire directement : Code :
__________________
~ Lola ~ Ne pas oublier : et aussi :
|
||
|
|
00
|
|
|
#8 |
|
Expert Confirmé Sénior
![]() Inscription : juillet 2003 Messages : 3 440 ![]() |
Non, le format de To_date correspond précisément à ce qu'il y a dans la colonne.. donc non oracle ne va pas deviner..
__________________
More Code : More Bugs. Less Code : Less Bugs |
|
|
00
|
|
|
#9 | ||
|
Expert Confirmé Sénior
![]() ![]() ![]() Laurent SchneiderAdministrateur de base de données Inscription : décembre 2005 Messages : 2 927 ![]() |
parfois il devine quand même un tout petit peu ...
Code :
http://docs.oracle.com/cd/E11882_01/...04.htm#g195479 |
||
|
00
|
|
|
#10 | ||||
|
Membre à l'essai
![]() Inscription : février 2005 Messages : 77 ![]() |
Ouahou!!!!!!! Je vois que ma demande déchaîne les passions !!
Après avoir lu quelques sujets sur différents forum, la maîtrise des données n'est pas acquise pour tout le monde, en particulier celle des conversion de date. Je parle pour moi bien sûr Citation:
Résultat DATE_CREATION TO_DATE ---------------------- ------------------------- 20110913 13/09/11 20101203 03/12/10 20070419 19/04/07 20110326 26/03/11 20101202 02/12/10 20101203 03/12/10 20110913 13/09/11 20110927 27/09/11 20110924 24/09/11 9 lignes sélectionnées Mais en lisant et en relisant vos réponses, j'ai réfléchi avec ma tête et sur cette réponse :: Citation:
![]() Si je l'écarte alors ça marche beaucoup mieux ![]() Pour résumé :
Code :
A tout à l'heure |
||||
|
|
00
|
|
|
#11 | |
|
Membre à l'essai
![]() Inscription : février 2005 Messages : 77 ![]() |
Ca fonctionne mais pas du 1er coup.Pourquoi ? Comme l'a très bien dit Citation:
Seulement, j'ai un cas particulier qui coince. Je précise que je suis utilisateur habilité uniquement à requêter dans les bases ORACLE mais je ne recherche pas des problèmes de cohérence de donnée mais plutôt un dysfonctionnement de notre système. Toutefois, pour une obtenir un résultat exploitable issue de plusieurs tables, je créé mes propres tables et d'où ma question initiale sur le formatage de date. Mon cas particulier est le suivant : je suis amené à requêter une table avec des champs contenant une date au format YYMMDD mais son type de data est VARCHAR2. Sous certaines conditions, il est parfois logique qu'aucune date ne soit indiquée dans ce champ. Cela se traduit par une valeur = 00000000 Évidement, avec ce que nous avons vu ci-dessus, nous arrivons à la conclusion que nous ne pouvons pas insérer une telle valeur dans un champ date. Et là, je bloque totalement ![]() Dois je modifier ma requête ou dois je modifier les caractéristiques du champ DATE de ma table pour prendre en compte ce cas particulier ? Je suis preneur de solutions diverses et variées. Merci d'avance. Bonne soirée |
|
|
|
00
|
|
|
#12 | ||
|
Membre Expert
![]() Pacman PacmanBusiness analyst Inscription : juin 2004 Messages : 1 417 ![]() |
Salut !
Pourquoi pas transformer ce pas de date en NULL ? Code :
__________________
(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/ |
||
|
00
|
|
|
#13 | ||
|
Membre à l'essai
![]() Inscription : février 2005 Messages : 77 ![]() |
Pacmann
Tu m'as devancé mais je prends pour ma culture ton exemple que j'essaierai. J'ai trouvé une autre solution avec un case : Code :
La nuit porte conseil et je clôturais la demande demain matin Bonne nuit |
||
|
|
00
|
|
|
#14 | ||
|
Membre Expert
![]() Laure Consultante en Business Intelligence Inscription : avril 2007 Messages : 983 ![]() |
Le problème de ton case c'est que dans ton exemple tu remplace '00000000' par une date qui peut aussi apparaitre ailleurs dans ta base de données. Il vaut mieux remplacer par null.
Si tu tiens à utiliser le case alors la syntaxe c'est : Code :
__________________
~ Lola ~ Ne pas oublier : et aussi :
|
||
|
|
00
|
|
|
#15 |
|
Membre à l'essai
![]() Inscription : février 2005 Messages : 77 ![]() |
Bonjour à tous
Pour répondre à Lola06, la date du 01/01/01 ne peut apparaître ailleurs dans la mesure où mon SI n'existait pas à cette époque. Mais rien n'est impossible. De plus, ta solution reflète plus la réalité car l'absence de date est le reflet des événements de notre SI. J'ai testé et cela fonctionne. ![]() Merci à tous et bonne journée Et attention au chocolat pour les prochains jours.... |
|
|
00
|
|
|
#16 |
|
Membre Expert
![]() Pacman PacmanBusiness analyst Inscription : juin 2004 Messages : 1 417 ![]() |
Tout à fait, cela reflète mieux la réalité, et cela évite un certain nombre de désagréments de la valeur bidon.
Par exemple, les statistiques basiques te calculent le nombre de NULL sur une colonne, alors que pour prendre en compte le biais induit par une valeur bidon, il faut des histogrammes...
__________________
(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/ |
|
00
|
|
|
#17 | ||||
|
Expert Confirmé Sénior
![]() ![]() ![]() Laurent SchneiderAdministrateur de base de données Inscription : décembre 2005 Messages : 2 927 ![]() |
ce qui est chouette c'est d'insérer des valeurs bidons dans la base, comme ça nous les DBA on a toujours du boulot
![]() sqlplus 11.2.0.3 Code :
Code :
|
||||
|
20
|
|
|
#18 | |
|
Membre Expert
![]() Inscription : août 2008 Messages : 1 271 ![]() |
Citation:
|
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com