2013-10-02 19 views
53

Jaka jest różnica między typem Oracle DATE i TIMESTAMP? Obie mają składnik daty i czasu? Co jest również odpowiednim typem w Javie dla tych typów dat?Różnica między wyrocznią DATE a TIMESTAMP

+2

['TIMESTAMP'] (http://docs.oracle.com/cd/B28359_01/server.111/b28286/sql_elements001.htm#SQLRF00203) jest taki sam jak' DATE', z tym, że dodała precyzję ułamków sekund . – NullUserException

+4

Największa różnica: "DATA" jest dokładna do sekundy i nie ma ułamkowych sekund. "TIMESTAMP" ma ułamkowe sekundy. Liczba miejsc dziesiętnych w sekundach zależy od systemu operacyjnego serwera, na przykład Oracle na moim komputerze z systemem Windows 7 zwraca trzy miejsca dziesiętne dla znacznika czasu, podczas gdy duże pole Solaris klienta zwraca sześć. Znaczniki czasu mogą również zawierać określoną strefę czasową lub być znormalizowane do wspólnej strefy czasowej - przejdź [tutaj] (http://docs.oracle.com/cd/B28359_01/server.111/b28286/sql_elements001.htm), a następnie wyszukaj " TIMESTAMP "po więcej informacji, poeksperymentuj trochę :) –

Odpowiedz

58

DATE i TIMESTAMP mają ten sam rozmiar (7 bajtów). Bajty te są używane do przechowywania wieku, dekady, roku, miesiąca, dnia, godziny, minuty i sekundy. Ale TIMESTAMP pozwala przechowywać dodatkowe informacje, takie jak ułamkowe sekundy (11 bajtów) i ułamkowe sekundy ze strefą czasową (13 bajtów).

TIMESTAMP został dodany jako zgodny z ANSI do Oracle. Wcześniej miał tylko datę.

W ogólnych przypadkach należy użyć DATE. Ale jeśli wymagana jest precyzja w czasie, użyj TIMESTAMP.

Co do języka Java, klasa oracle.sql.DATE ze sterownika Oracle JDBC, zapewnia konwersje między typem danych Datownik/Datownik Oracle a klasami Java java.sql.Date, java.sql.Time i java.sql.Timestamp .

+0

Słowo ostrzeżenia: niestety wygląda na to, że domyślnie, gdy zapytasz kolumnę DATE w Oracle, zwraca ona tylko" dzień ", ale jeśli ją rzucisz TO_TIMESTAMP (DATE_COLUMN_NAME), a następnie zwraca większą precyzję. Który w jakiś sposób nie jest domyślny z jdbc/hibernate, przynajmniej go tutaj nie ma. – rogerdpack

+2

"W ogólnych przypadkach powinieneś użyć DATY" - ale dlaczego, dokładnie? – siledh

+0

Hi @siledh, myślę, że powinieneś używać TIMESTAMP tylko wtedy, gdy dodatkowe informacje (strefa czasowa) jest ważna dla twojej aplikacji. To zależy od twojej logiki biznesowej. Na przykład, musisz wybrać TIMEZONE, gdy chcesz udostępnić swoje dane aplikacjom wdrożonym na różnych platformach, a informacje o czasie muszą być jednoznacznie zrozumiane. –