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)
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)
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
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 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.