Diferencia entre Oracle DATE y TIMESTAMP

92

¿Cuál es la diferencia entre el tipo Oracle DATE y TIMESTAMP? ¿Ambos tienen componente de fecha y hora? Además, ¿cuál es el tipo correspondiente en Java para estos tipos de fecha?

supernova
fuente
3
TIMESTAMPes el mismo que DATE, excepto que ha agregado una precisión de fracciones de segundo.
NullUserException
5
La mayor diferencia: DATEtiene una precisión de segundos y no tiene fracciones de segundo. TIMESTAMPtiene fracciones de segundo. El número de posiciones decimales en los segundos depende del sistema operativo del servidor, por ejemplo, Oracle en mi máquina con Windows 7 devuelve tres posiciones decimales para la marca de tiempo, mientras que el enorme cuadro Solaris de un cliente devuelve seis. Las marcas de tiempo también pueden contener una zona horaria específica o normalizarse a una zona horaria común. Vaya aquí y luego busque "TIMESTAMP" para obtener más información, luego experimente un poco :)
Ed Gibbs

Respuestas:

98

DATE y TIMESTAMP tienen el mismo tamaño (7 bytes). Esos bytes se utilizan para almacenar siglo, década, año, mes, día, hora, minuto y segundos. Pero TIMESTAMP permite almacenar información adicional, como segundos fraccionarios (11 bytes) y segundos fraccionarios con zona horaria (13 bytes).

TIMESTAMP se agregó como un compatible con ANSI para Oracle. Antes de eso, solo tenía DATE.

En casos generales, debe usar DATE. Pero si la precisión en el tiempo es un requisito, use TIMESTAMP.

Y sobre Java, la clase oracle.sql.DATE del controlador Oracle JDBC, proporciona conversiones entre el tipo de datos Oracle Date / Timestamp y las clases Java java.sql.Date, java.sql.Time y java.sql.Timestamp.

Guillermo Luque
fuente
1
Una advertencia: desafortunadamente, parece que, de forma predeterminada, cuando consulta una columna DATE en Oracle, solo le devuelve el "día", pero si lo lanza como TO_TIMESTAMP (DATE_COLUMN_NAME), entonces le devuelve más precisión. Lo cual de alguna manera no es el predeterminado con jdbc / hibernate, al menos no está aquí.
rogerdpack
6
"En casos generales, debería usar DATE", pero ¿por qué exactamente?
sil
4
Deberías usar TIMESTAMP WITH TIME ZONE. De lo contrario, el horario de verano introducirá horas ambiguas.
kmkaplan
15
Lo encuentro realmente confuso, ese tipo de FECHA contiene información de HORA. Eso no es lo que significa la palabra.
Daddy32
2
@ Daddy32 TIMESTAMPse agregó unos 20 años después DATE. Realmente no podían volver atrás y cambiar DATE.
William Robertson