Différence entre oracle DATE et TIMESTAMP

92

Quelle est la différence entre le type Oracle DATE et TIMESTAMP? Les deux ont un composant de date et d'heure? Quel est également le type correspondant en Java pour ces types de date?

supernova
la source
3
TIMESTAMPest identique à DATE, sauf qu'il a ajouté une précision en fraction de seconde.
NullUserException
5
La plus grande différence: DATEest précis à la seconde et n'a pas de fraction de seconde. TIMESTAMPa des fractions de seconde. Le nombre de décimales dans les secondes dépend du système d'exploitation du serveur, par exemple, Oracle sur ma machine Windows 7 renvoie trois décimales pour l'horodatage tandis que l'énorme boîte Solaris d'un client en renvoie six. Les horodatages peuvent également contenir un fuseau horaire spécifique ou être normalisés à un fuseau horaire commun - allez ici et recherchez «TIMESTAMP» pour plus d'informations, puis expérimentez un peu :)
Ed Gibbs

Réponses:

98

DATE et TIMESTAMP ont la même taille (7 octets). Ces octets sont utilisés pour stocker le siècle, la décennie, l'année, le mois, le jour, l'heure, les minutes et les secondes. Mais TIMESTAMP permet de stocker des informations supplémentaires telles que des fractions de seconde (11 octets) et des fractions de seconde avec fuseau horaire (13 octets).

TIMESTAMP a été ajouté en tant que conforme ANSI à Oracle. Avant cela, il n'y avait que DATE.

Dans les cas généraux, vous devez utiliser DATE. Mais si la précision dans le temps est une exigence, utilisez TIMESTAMP.

Et à propos de Java, la classe oracle.sql.DATE du pilote Oracle JDBC, fournit des conversions entre le type de données Oracle Date / Timestamp et les classes Java java.sql.Date, java.sql.Time et java.sql.Timestamp.

Guillermo Luque
la source
1
Un mot d'avertissement: malheureusement, il semble que, par défaut, lorsque vous interrogez une colonne DATE dans Oracle, elle ne vous renvoie que le "jour", mais si vous la castez comme TO_TIMESTAMP (DATE_COLUMN_NAME), elle vous renvoie plus de précision. Ce qui n'est en quelque sorte pas la valeur par défaut avec jdbc / hibernate, du moins ce n'est pas ici.
rogerdpack
6
"En général, vous devriez utiliser DATE" - mais pourquoi, exactement?
siledh
4
Vous devriez utiliser TIMESTAMP WITH TIME ZONE. Sinon, l'heure d'été introduira des heures ambiguës.
kmkaplan
15
Je trouve cela vraiment déroutant, ce type DATE contient des informations TIME. Ce n'est pas ce que le mot veut dire.
Daddy32
3
@ Daddy32 a TIMESTAMPété ajouté environ 20 ans après DATE. Ils ne pouvaient pas vraiment revenir en arrière et changer DATE.
William Robertson