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 10/03/2008, 10h09   #1
Rédacteur

 
Avatar de Louis-Guillaume Morand
 
Homme Louis-Guillaume MORAND
Consultant @ Microsoft
Inscription : mars 2003
Messages : 10 713
Détails du profil
Informations personnelles :
Nom : Homme Louis-Guillaume MORAND
Localisation : France, Hauts de Seine (Île de France)

Informations professionnelles :
Activité : Consultant @ Microsoft
Secteur : Conseil

Informations forums :
Inscription : mars 2003
Messages : 10 713
Points : 15 946
Points : 15 946
Par défaut TO_CHAR et TO_DATE

Bonjour,

j'ai une colonne de type Date qui contient des données au format datetime comme par exemple "07/03/2008 00:00:00". Appelons cette colonne "madate".
Pourquoi n'ai-je pas le même résultat avec

Code :
TO_CHAR(madate,'DD/MM/YYYY')
et
Code :
TO_DATE(madate,'DD/MM/YYYY')
la première me ressort "07/03/2008" ce qui est ce que je veux mais qui utilise TO_CHAR (et je sais pas si c'est bien) et la seconde me retourne "07/03/0008" ce qui me plait pas du tout.

Quelqu'un pourrait-il m'expliquer pourquoi une méthode dédiée au traitement des dates ne fonctionne-t-elle pas? et comment il fait passer de "2008" à "0008"?

merci d'avance
__________________
moi c'est Louis-Guillaume, ni Louis, ni Guillaume mais Louis-Guillaume et je n'aide pas ceux qui écorchent mon nom
Louis-Guillaume Morand est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/03/2008, 10h15   #2
McM
Expert Confirmé Sénior
 
Inscription : juillet 2003
Messages : 3 453
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 3 453
Points : 4 215
Points : 4 215
L'éternelle erreur de compréhension.

Un DATE est une DATE.
Une Chaine de Caractère est une chaine de caractère.

TO_DATE transforme une chaine de caractère en une date
TO_CHAR transforme une date en une chaine de caractère

Utiliser un to_date sur une date ne veut rien dire.
__________________
More Code : More Bugs. Less Code : Less Bugs
McM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/03/2008, 10h18   #3
Rédacteur

 
Avatar de Louis-Guillaume Morand
 
Homme Louis-Guillaume MORAND
Consultant @ Microsoft
Inscription : mars 2003
Messages : 10 713
Détails du profil
Informations personnelles :
Nom : Homme Louis-Guillaume MORAND
Localisation : France, Hauts de Seine (Île de France)

Informations professionnelles :
Activité : Consultant @ Microsoft
Secteur : Conseil

Informations forums :
Inscription : mars 2003
Messages : 10 713
Points : 15 946
Points : 15 946
d'une certaine façon, ça me semble logique, de l'autre, ça ne me convient pas forcément.
1- pourquoi le to_date se trompe?
2- le problème avec le to_char est que via ma DAL (.Net) je récupère une colonne typée de type string et non date.


en tout cas, maintenant, ca me semble plus clair merci.
__________________
moi c'est Louis-Guillaume, ni Louis, ni Guillaume mais Louis-Guillaume et je n'aide pas ceux qui écorchent mon nom
Louis-Guillaume Morand est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/03/2008, 10h24   #4
Membre confirmé
 
Avatar de DAB.cz
 
Inscription : octobre 2006
Messages : 221
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 221
Points : 214
Points : 214
Citation:
Envoyé par Louis-Guillaume Morand Voir le message
une colonne de type Date qui contient des données au format datetime comme par exemple "07/03/2008 00:00:00
la colonne est de type Date, aucun format!!!

to_char créé varchar2 de date
Code :
varchar2 := TO_CHAR(date, 'DD/MM/YYYY')
et to_date créé date de varchar2
Code :
date := TO_DATE(varchar2, 'DD/MM/YYYY')
Passer date à to_date fonctionne grâce à conversion implicite (d'après NLS)
DAB.cz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/03/2008, 10h37   #5
Rédacteur

 
Avatar de Louis-Guillaume Morand
 
Homme Louis-Guillaume MORAND
Consultant @ Microsoft
Inscription : mars 2003
Messages : 10 713
Détails du profil
Informations personnelles :
Nom : Homme Louis-Guillaume MORAND
Localisation : France, Hauts de Seine (Île de France)

Informations professionnelles :
Activité : Consultant @ Microsoft
Secteur : Conseil

Informations forums :
Inscription : mars 2003
Messages : 10 713
Points : 15 946
Points : 15 946
Citation:
la colonne est de type Date, aucun format!!!
oui, enfin je me comprend car sur certains SGBD, on a des colonnes de type Date et d'autres de type DateTime (pas ma faute si Oracle n'en gère qu'un seul )
__________________
moi c'est Louis-Guillaume, ni Louis, ni Guillaume mais Louis-Guillaume et je n'aide pas ceux qui écorchent mon nom
Louis-Guillaume Morand est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/03/2008, 11h02   #6
McM
Expert Confirmé Sénior
 
Inscription : juillet 2003
Messages : 3 453
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 3 453
Points : 4 215
Points : 4 215
Tu as aussi le type TIMESTAMP sous Oracle.
__________________
More Code : More Bugs. Less Code : Less Bugs
McM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/03/2008, 14h53   #7
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
Citation:
Envoyé par Louis-Guillaume Morand Voir le message
oui, enfin je me comprend car sur certains SGBD, on a des colonnes de type Date et d'autres de type DateTime (pas ma faute si Oracle n'en gère qu'un seul )
bonne remarque!

bon, pour enlever la partie time tu peux employer TRUNC(date)
__________________
Mon blog : laurentschneider.com
Mon livre : Advanced Oracle SQL Programming
laurentschneider 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 08h44.


 
 
 
 
Partenaires

Hébergement Web