Equivalent smalldatetime sous oracle

Fermé
Ghislain22 Messages postés 13 Date d'inscription vendredi 20 novembre 2009 Statut Membre Dernière intervention 6 janvier 2010 - 23 nov. 2009 à 18:14
 fiu - 26 nov. 2009 à 00:12
Bonjour,

Je cherche l'équivalent de smalldatetime sous oracle!

Car pour l'instant j'utilise le format timestamp mais je ne veux pas une précision aussi importante( cent millieme de secondes!!) ex :01/09/09 08:16:02,00000 (sous timestamp) et moi je voudrais 01/09/09 08:16:02

Merci d'avance

2 réponses

Hello

il n'y a qu'un type DATE qui sert à tout. pour le reste, ce n'est qu'une histoire d'affichage to_char(<date>, <format>)
=> select to_char(sysdate, 'dd mmm yyyy') from dual;
=> select to_char(sysdate, 'hh24:mi:ss') from dual;
0
Ghislain22 Messages postés 13 Date d'inscription vendredi 20 novembre 2009 Statut Membre Dernière intervention 6 janvier 2010
24 nov. 2009 à 09:58
Bonjour,

le probleme est que quand je mets le format date puis que j'insere
INSERT INTO REPARATION
VALUES ( 001, 200, TO_DATE('01-09-2009 9:18:25','DD-MM-YYYY HH24:MI:SS'));

il m'affiche 01/09/2009 et pas l'heure

Et quand je mets le format timestamp et que j'insere la meme chose il m'affiche 01/09/2009 9:18:25,00000 et je ne veux pas autant de précision( '00000')

Merci d'avance
0
Salut

Les horodatages sont convertis en chaîne (et vice-versa) grâce à un modèle : NLS_DATE_FORMAT.
Lors de ton insert, le format utilisé pour la conversion est précisé dans la fonction to_char().
Mais pour l'affichage, quel format utilises-tu ?

1. Vérifie que l'heure est bien là en faisant
select to_char(datexxx, 'DD-MM-YYYY HH24:MI:SS')
from reparation
where id1=1 and id2=200;
-- je te laisse remplacer id1, id2 et datexxx par les bons noms
Ça devrait afficher 01-09-2009 09:18:25

2. modifie le modèle de conversion d'horodatage de ta session avec la commande
alter session set nls_date_format = 'dd-mm-yyyy hh24:mi:ss';
et affiche l'heure enregistrée avec
select datexxx from reparation where id1=1 and id2=200;
tu peux aussi donner une requête spécifiant un horodatage et laisser Oracle le convertir avec le modèle en cours:
select id1, id2 from reparation where datexxx='01-09-2009 09:18:25';

=> Oracle convertit ta chaine en horodatage car la conversion fonctionne dans les deux sens avec le NLS_DATE_FORMAT défini.

à la longue, je suis devenu économe sur la ponctuation (l'alter session est à faire à chaque début de session), aussi c'est devenu
alter session set nls_date_format='yyyymmdd.hh24miss';
le select t'aurait alors affiché 20090901.091825

À l'intérieur de la base, c'est la même chose : les éventuelles conversions implicites chaîne / horodatage sont faites avec le modèle en cours pour la session ; si l'on est pas sûr du modèle, mieux vaut, pour éviter les exceptions en rafale, spécifier le modèle de conversion dans to_date() ou to_char().
0