Précédent   Forum des professionnels en informatique > Bases de données > Oracle
Oracle Forum Oracle : le serveur, les outils, ... Voir F.A.Q Oracle Tutoriels 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 16/08/2007, 15h42   #1
Membre du Club
 
Inscription : juin 2006
Messages : 176
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 176
Points : 45
Points : 45
Par défaut Format DateTime sous oracle

Bonjour a tous,
Je débute en Oracle et ne connait pas le format DateTime (avec l'heure) j'ai toujour utiliser un format date simple dans lequelle j'inserer mes dates comme ca : insert into ... values ("20070816"); ou je selectionné des enregistrements comme ca : select ... where date between "date" and "date". Et la avec le format DateTime je m'en sort pas je voi sur des forums et des sites des soluces dans ce genre To_number(to_char(to...(DateTime, "mmddyyyy"))) ect ... mais je ne comprend pas trop.

Mon seul but dans cette histoire et de pouvoir faire une requettes avec une condition portant sur une date (le champ est au format DateTime SGBD : oracle)

ex select blabla from table where date="20070816" (marche pas .. )

si quelqu'un peut m'aider ce serais cool
sinon bonne proggz a tousss
Ice-tea est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/08/2007, 15h52   #2
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
Le format date d'oracle inclus automatiquement les heures :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
SQL> CREATE TABLE t1 (d date);
TABLE created.
 
SQL> INSERT INTO t1 VALUES (sysdate);
1 row created.
 
 
SQL> ALTER session SET nls_date_format = 'DD/MM/RRRR HH24:MI:SS';
Session altered.
 
SQL> SELECT d FROM t1;
D
-------------------
16/08/2007 15:49:59
Le format date pouvant changé d'une session à l'autre il est très risqué de traiter des dates sans spécifier le format, il est donc conseiller de faire :
Code :
INSERT INTO maTable VALUES (..., to_date ('16/08/2007', 'DD/MM/RRRR'), ...);
ou
Code :
1
2
3
SELECT *
FROM maTable
WHERE colDate = to_date ('16/08/2007', 'DD/MM/RRRR');
Sinon Oracle fait une conversion implicite et si le format de la session n'est pas celui de la chaîne de caractère, tu risques d'avoir une erreur.
__________________
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 17/08/2007, 11h44   #3
Membre du Club
 
Inscription : juin 2006
Messages : 176
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 176
Points : 45
Points : 45
Par défaut toujour un pb avec ma condition where date=to_date(date , format)

hello, merci pour ta réponse, (jpenser avoir reply hiere soir mais j'ai du oublier de valider ma réponses avant de partir!).

Je pense avoir compris une partie de ton explication, mais ca ne marche toujour pas.

Plusieurs questions suite a ton poste :

Le alter session set ... JJMMRRRR est il obligatoire pour que les requettes que tu as écris fonctionnent.

Le format date (j'ai toujour vu MMDDYYYY, le fait que tu a mis RRRR est ce que ca joue bcp, est ce vraiment important ou non).

Sinon voici ma requette (qui ne marche pas)
Code :
1
2
 
SELECT * FROM Utilisateur WHERE StartDate>=to_date('08-01-2007', 'mm-dd-yyyy')
j'ai essayé de remuer le format DateTime dans ton les sens DDMMYYYY ddmmyyyy avec des '-' sans '-' des '/' sans '/' ... les dates dans ma base sont comme ca : mois/jours/annnée

Autre chose je précise que je n'est pas de SQL + ni aucun outil pour tester mes requettes en direct, j'utilise perl pour ecrire mes requettes et un ODBC pour oracle fait l'interface entre la base et mon programme.

Voila si quelqu'un voi ou est ce que mon probleme se situe je suis prenneur

Bonne progZ a tous
Ice-tea est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/08/2007, 14h56   #4
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 Ice-tea
Le alter session set ... JJMMRRRR est il obligatoire pour que les requettes que tu as écris fonctionnent.
Non, c'était juste pour illustrer que les colonnes dates d'oracle prenait bien en compte l'heure.

Citation:
Envoyé par Ice-tea
Le format date (j'ai toujour vu MMDDYYYY, le fait que tu a mis RRRR est ce que ca joue bcp, est ce vraiment important ou non).
RRRR est à privilègier dans ce type de cas:
Code :
1
2
3
4
5
6
7
8
9
SQL> SELECT to_date ('25/10/85', 'DD/MM/YYYY') FROM dual;
TO_DATE('2
----------
25/10/0085
 
SQL> select to_date ('25/10/85', 'DD/MM/RRRR') from dual;
TO_DATE('2
----------
25/10/1985
Sinon c'est équivalent :
Code :
1
2
3
4
5
6
7
8
9
SQL> SELECT to_date ('25/10/1985', 'DD/MM/YYYY') FROM dual;
TO_DATE('2
----------
25/10/1985
 
SQL> select to_date ('25/10/1985', 'DD/MM/RRRR') from dual;
TO_DATE('2
----------
25/10/1985
Citation:
Envoyé par Ice-tea
Sinon voici ma requette (qui ne marche pas)
Code :
1
2
 
SELECT * FROM Utilisateur WHERE StartDate>=to_date('08-01-2007', 'mm-dd-yyyy')
Message d'erreur ? Qu'est-ce qui "ne marche pas" ?
__________________
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 17/08/2007, 15h12   #5
Membre du Club
 
Inscription : juin 2006
Messages : 176
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 176
Points : 45
Points : 45
j'ai beaucoup de mal a recup les message d'erreur avec perl a priorie il m'affiche aucun message d'erreur Mais ne recupere rien (j'utilise une vue)

ma requette est elle correct ?

N'aillant pas les infos sur la base de données j'en ai conclu moi meme que le format etait datetime, existe t'il un autre format sous oracle qui aurait pour masque : 17/08/2007 00:00:00 ?

Merci pour la reponse

bonne progz a tous
Ice-tea est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/08/2007, 15h39   #6
Membre du Club
 
Inscription : juin 2006
Messages : 176
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 176
Points : 45
Points : 45
quand je fait un select * voici un exemple des du format date retourné par oracle :
08/17/2007 00:00:00

ma requette (pour ce resultat)
Code :
SELECT StartDate FROM ActiveUsers
now quelques chose qui me ramene rien :
Code :
SELECT StartDate FROM ActiveUsers WHERE StartDate=to_date('08/17/2007', 'MM/DD/YYYY');
la 2eme requette me ramene rien (et je n'arrive pas a savoir si un message d'ereur et retourné, je me demande si ma requette est correcte
Ice-tea est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/08/2007, 15h41   #7
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
Merci d'utiliser les balises CODE

Si ta colonne est de format date avec les heures ça ne peut effectivement pas fonctionner. Il faut faire :
Code :
1
2
3
4
 
SELECT StartDate 
FROM ActiveUsers 
WHERE StartDate LIKE to_date('08/17/2007', 'MM/DD/YYYY')
ou bien

Code :
1
2
3
4
 
SELECT StartDate 
FROM ActiveUsers 
WHERE trunc(StartDate) = to_date('08/17/2007', 'MM/DD/YYYY')
mais là, gare aux indexes
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/08/2007, 17h43   #8
Membre du Club
 
Inscription : juin 2006
Messages : 176
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 176
Points : 45
Points : 45
merciii pour ta réponse ... c bizzard j'ai tester les requettes sur une certaines base oracle sa marche nickel et des que jl'ai éxécute sur bonne base sa marche pas aucun resultat retourner, aucun message, tfacon ras le Q, jpeux pas trop manipuler cette base, jconnais pas le format des champs, ni meme les champs d'ailleurs apart 2 ou 3 ... et pour aller plus loin j'ai meme pas de pass pour me connecter a la base (inclut dans l odbc) ... breff jpeux rien foutre c plus casse souille qu'autre chose (oui oui j'ai tester de manipuler la base via oracle et access) ...
Jvous remercii a touss pour votre aide (les derniere requettes que vous m'avez donnés on etaient tester sur une base oracle et marche, merci a toussss
bonne proggg
Ice-tea est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 13h55.


 
 
 
 
Partenaires

Hébergement Web