49 votes

Type de données Oracle timestamp

Quelle est la différence entre le type de données timestamp sans paramètre et avec le paramètre 0 :

timestamp VS timestamp(0)

60voto

Michael Berkowski Points 137903

Le nombre entre parenthèses indique la précision des secondes fractionnelles à stocker. Ainsi , (0) signifierait qu'il ne faut pas stocker de fraction de seconde, et n'utiliser que des secondes entières. La valeur par défaut si elle n'est pas spécifiée est de 6 chiffres après le séparateur décimal.

Ainsi, une valeur non spécifiée stockerait une date comme :

TIMESTAMP 24-JAN-2012 08.00.05.993847 AM

Et en spécifiant (0) uniquement dans les magasins :

TIMESTAMP(0) 24-JAN-2012 08.00.05 AM

Voir la documentation Oracle sur les types de données.

29voto

APC Points 69630

Il s'agit tout simplement de la précision de l'horodatage, la fraction de seconde contenue dans la colonne :

SQL> create table t23
  2  (ts0 timestamp(0)
  3   , ts3 timestamp(3)
  4  , ts6 timestamp(6)
  5  )
  6  /

Table created.

SQL> insert into t23 values (systimestamp, systimestamp, systimestamp)
  2  /

1 row created.

SQL> select * from t23
  2  /

TS0
---------------------------------------------------------------------------
TS3
---------------------------------------------------------------------------
TS6
---------------------------------------------------------------------------
24-JAN-12 05.57.12 AM
24-JAN-12 05.57.12.003 AM
24-JAN-12 05.57.12.002648 AM

SQL> 

Si nous ne spécifions pas de précision, l'horodatage se fait par défaut à six chiffres.

SQL> alter table t23 add ts_def timestamp;

Table altered.

SQL> update t23      
  2  set ts_def = systimestamp
  3  /

1 row updated.

SQL> select * from t23
  2  /

TS0
---------------------------------------------------------------------------
TS3
---------------------------------------------------------------------------
TS6
---------------------------------------------------------------------------
TS_DEF
---------------------------------------------------------------------------
24-JAN-12 05.57.12 AM
24-JAN-12 05.57.12.003 AM
24-JAN-12 05.57.12.002648 AM
24-JAN-12 05.59.27.293305 AM

SQL> 

Notez que je fonctionne sous Linux, donc ma TIMESTAMP me donne en fait une précision à six chiffres, c'est-à-dire des microsecondes. C'est également le cas sur la plupart (toutes ?) des versions d'Unix. Sous Windows, la limite est de trois chiffres, c'est-à-dire des millisecondes. (Est-ce toujours le cas pour les versions les plus modernes de Windows - citation nécessaire).

Comme on pouvait s'y attendre, la documentation couvre ce point. Pour en savoir plus .


"quand vous créez timestamp(9) cela vous donne droit à des nanos"

Seulement si le système d'exploitation le supporte. Comme vous pouvez le constater, mon appareil OEL ne le supporte pas :

SQL> alter table t23 add ts_nano timestamp(9)
  2  /

Table altered.

SQL> update t23 set ts_nano = systimestamp(9)
  2  /

1 row updated.

SQL> select * from t23
  2  /

TS0
---------------------------------------------------------------------------
TS3
---------------------------------------------------------------------------
TS6
---------------------------------------------------------------------------
TS_DEF
---------------------------------------------------------------------------
TS_NANO
---------------------------------------------------------------------------
24-JAN-12 05.57.12 AM
24-JAN-12 05.57.12.003 AM
24-JAN-12 05.57.12.002648 AM
24-JAN-12 05.59.27.293305 AM
24-JAN-12 08.28.03.990557000 AM

SQL> 

(Ces zéros de queue pourraient être une coïncidence, mais ce n'en est pas une).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X