2013-10-02 103 views
53

Oracle DATE和TIMESTAMP類型有什麼區別? 兩者都有日期和時間組件? 這些日期類型在Java中的對應類型是什麼?Oracle DATE和TIMESTAMP之間的區別

+2

['TIMESTAMP'](http://docs.oracle.com/cd/B28359_01/server.111/b28286/sql_elements001.htm#SQLRF00203)與'DATE'相同,只是它增加了小數秒精度。 – NullUserException

+4

最大的區別是:'DATE'精確到秒,沒有小數秒。 'TIMESTAMP'具有小數秒。秒數中的小數位數取決於服務器操作系統,例如,我的Windows 7計算機上的Oracle爲時間戳返回三位小數,而客戶端的大型Solaris盒返回六位。時間戳還可以保存特定時區或按照常規時區進行標準化 - 轉到[此處](http://docs.oracle.com/cd/B28359_01/server.111/b28286/sql_elements001.htm),然後搜索「 TIMESTAMP「以獲得更多信息,然後試驗一下:) –

回答

58

DATE和TIMESTAMP具有相同的大小(7個字節)。這些字節用於存儲世紀,十年,年,月,日,時,分和秒。但TIMESTAMP允許存儲其他信息,例如小數秒(11字節)和帶時區(13字節)的小數秒。

TIMESTAMP已添加爲與Oracle兼容的ANSI。在此之前,它只有DATE。

在一般情況下,您應該使用DATE。但是,如果時間精度是要求,請使用TIMESTAMP。

關於Java,來自Oracle JDBC驅動程序的oracle.sql.DATE類提供了Oracle日期/時間戳數據類型與Java類java.sql.Date,java.sql.Time和java.sql.Timestamp之間的轉換。

+0

一句警告:不幸的是,默認情況下,當您在Oracle中查詢DATE列時,它只會返回」日期「,但如果您將其轉換爲TO_TIMESTAMP(DATE_COLUMN_NAME)然後返回更精確。哪種方式不是jdbc/hibernate的默認配置,至少它不在這裏。 – rogerdpack

+2

「在一般情況下,你應該使用日期」 - 但爲什麼,到底是什麼? – siledh

+0

嗨@siledh,我認爲你應該只在附加信息(時區)對你的應用程序很重要時才使用TIMESTAMP。我的意思是,這取決於你的業務邏輯。例如,當您需要與部署在不同平臺上的應用程序共享您的數據時,您必須選擇TIMEZONE,並且時間信息必須在它們之間毫不含糊地理解。 –