Equivalent smalldatetime sous oracle

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
Configuration: Windows XP Internet Explorer 7.0

2 réponses

  • Votes
  • Date
  • Date décroissante
  1. 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;
    1. 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
  2. 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().