Jaka jest różnica między typami Oracle DATE i TIMESTAMP? Obie mają składnik daty i godziny? Jaki jest również odpowiedni typ w Javie dla tych typów dat?
TIMESTAMPjest taki sam, jak DATE, z wyjątkiem dodania precyzji do ułamków sekund.
NullUserException
5
Największa różnica: DATEjest dokładna co do sekundy i nie ma ułamków sekund. TIMESTAMPma ułamki sekund. 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 po przecinku dla znacznika czasu, podczas gdy ogromne okno Solaris klienta zwraca sześć. Znaczniki czasu mogą również zawierać określoną strefę czasową lub być znormalizowane do zwykłej strefy czasowej - przejdź tutaj, a następnie wyszukaj „TIMESTAMP”, aby uzyskać więcej informacji, a następnie trochę poeksperymentuj :)
Ed Gibbs
Odpowiedzi:
98
DATE i TIMESTAMP mają ten sam rozmiar (7 bajtów). Te bajty są używane do przechowywania wieku, dekady, roku, miesiąca, dnia, godziny, minuty i sekundy. Ale TIMESTAMP pozwala na przechowywanie dodatkowych informacji, takich jak ułamki sekund (11 bajtów) i ułamki sekund 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ć DATA. Ale jeśli wymagana jest precyzja w czasie, użyj TIMESTAMP.
A jeśli chodzi o Javę, klasa oracle.sql.DATE ze sterownika Oracle JDBC zapewnia konwersję między typem danych Oracle Date / Timestamp a klasami Java java.sql.Date, java.sql.Time i java.sql.Timestamp.
Słowo ostrzeżenia: niestety wygląda na to, że domyślnie, gdy odpytujesz kolumnę DATE w Oracle, zwraca ci tylko „dzień”, ale jeśli rzucisz to jak TO_TIMESTAMP (DATE_COLUMN_NAME), zwraca ci większą precyzję. Co w jakiś sposób nie jest domyślne w przypadku jdbc / hibernate, przynajmniej nie ma go tutaj.
rogerdpack
6
„W ogólnych przypadkach należy używać DATA” - ale dlaczego dokładnie?
siledh
4
Powinieneś użyć TIMESTAMP WITH TIME ZONE. W przeciwnym razie czas letni wprowadzi niejednoznaczne czasy.
kmkaplan
15
Uważam, że to naprawdę zagmatwane, że typ DATA zawiera informacje o CZASIE. Nie to oznacza to słowo.
Daddy 32
3
@ Daddy32 TIMESTAMPzostał dodany około 20 lat później DATE. Naprawdę nie mogli wrócić i się zmienić DATE.
TIMESTAMP
jest taki sam, jakDATE
, z wyjątkiem dodania precyzji do ułamków sekund.DATE
jest dokładna co do sekundy i nie ma ułamków sekund.TIMESTAMP
ma ułamki sekund. 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 po przecinku dla znacznika czasu, podczas gdy ogromne okno Solaris klienta zwraca sześć. Znaczniki czasu mogą również zawierać określoną strefę czasową lub być znormalizowane do zwykłej strefy czasowej - przejdź tutaj, a następnie wyszukaj „TIMESTAMP”, aby uzyskać więcej informacji, a następnie trochę poeksperymentuj :)Odpowiedzi:
DATE i TIMESTAMP mają ten sam rozmiar (7 bajtów). Te bajty są używane do przechowywania wieku, dekady, roku, miesiąca, dnia, godziny, minuty i sekundy. Ale TIMESTAMP pozwala na przechowywanie dodatkowych informacji, takich jak ułamki sekund (11 bajtów) i ułamki sekund 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ć DATA. Ale jeśli wymagana jest precyzja w czasie, użyj TIMESTAMP.
A jeśli chodzi o Javę, klasa oracle.sql.DATE ze sterownika Oracle JDBC zapewnia konwersję między typem danych Oracle Date / Timestamp a klasami Java java.sql.Date, java.sql.Time i java.sql.Timestamp.
źródło
TIMESTAMP WITH TIME ZONE
. W przeciwnym razie czas letni wprowadzi niejednoznaczne czasy.TIMESTAMP
został dodany około 20 lat późniejDATE
. Naprawdę nie mogli wrócić i się zmienićDATE
.