Diferença entre oracle DATE e TIMESTAMP

94

Quais são as diferenças entre o tipo Oracle DATE e TIMESTAMP? Ambos possuem componente de data e hora? Além disso, qual é o tipo correspondente em Java para esses tipos de data?

Super Nova
fonte
3
TIMESTAMPé o mesmo que DATE, exceto que adicionou precisão de segundos fracionários.
NullUserException
5
A maior diferença: DATEtem precisão de segundos e não tem frações de segundos. TIMESTAMPtem frações de segundos. O número de casas decimais em segundos depende do sistema operacional do servidor, por exemplo, o Oracle em minha máquina com Windows 7 retorna três casas decimais para o carimbo de data / hora, enquanto a enorme caixa Solaris de um cliente retorna seis. Os carimbos de data / hora também podem conter um fuso horário específico ou ser normalizados para um fuso horário comum - acesse aqui e pesquise "TIMESTAMP" para obter mais informações e experimente um pouco :)
Ed Gibbs,

Respostas:

98

DATE e TIMESTAMP têm o mesmo tamanho (7 bytes). Esses bytes são usados ​​para armazenar século, década, ano, mês, dia, hora, minuto e segundos. Mas TIMESTAMP permite armazenar informações adicionais, como segundos fracionários (11 bytes) e segundos fracionários com fuso horário (13 bytes).

TIMESTAMP foi adicionado como um ANSI compatível com o Oracle. Antes, tinha apenas DATE.

Em casos gerais, você deve usar DATE. Mas se a precisão no tempo for um requisito, use TIMESTAMP.

E sobre Java, a classe oracle.sql.DATE do driver Oracle JDBC, fornece conversões entre o tipo de dados Oracle Date / Timestamp e as classes Java java.sql.Date, java.sql.Time e java.sql.Timestamp.

Guillermo Luque
fonte
1
Um aviso: infelizmente, parece que, por padrão, quando você consulta uma coluna DATE no Oracle, ela retorna apenas o "dia", mas se você convertê-la como TO_TIMESTAMP (DATE_COLUMN_NAME), ela retorna mais precisão. Que de alguma forma não é o padrão com jdbc / hibernate, pelo menos não está aqui.
rogerdpack de
6
"Em casos gerais, você deve usar DATE" - mas por quê, exatamente?
siledh
4
Você deve usar TIMESTAMP WITH TIME ZONE. Caso contrário, o horário de verão apresentará horários ambíguos.
kmkaplan
17
Acho muito confuso esse tipo de DATE conter informações de TIME. Não é isso que a palavra significa.
Daddy32
3
@ Daddy32 TIMESTAMPfoi adicionado cerca de 20 anos depois DATE. Eles não podiam realmente voltar e mudar DATE.
William Robertson