2015-05-29 105 views
2

我使用oracle作爲我的數據庫,我有一個taskdate列作爲TIMESTAMP。它保存在數據庫中的格式是5/29/2015 10:27:04.000000 AM。我可以將它轉換成2015-05-29這種格式,當我找回來?從數據庫檢索日期作爲另一種格式

+0

你喜歡** **格式的時間戳或** TRUNC時間部分* *? –

回答

2

格式保存在數據庫是2015年5月29日10:27:04.000000 AM

日期/時間戳沒有任何格式。 Oracle不會以您看到的格式存儲日期/時間戳。您看到的格式僅適用於顯示器的用途。 日期內部存儲在Oracle專有格式的7個字節中。

我可以將它轉換成2015-05-29這種格式嗎?

對於顯示:

您需要使用TO_CHAR具有所需業態模式沿着你想要的格式顯示。

例如,

SQL> SELECT SYSTIMESTAMP, TO_CHAR(SYSTIMESTAMP, 'YYYY-MM-DD') my_tmstmp FROM DUAL; 

SYSTIMESTAMP        MY_TMSTMP 
---------------------------------------- ---------- 
29-MAY-15 11.40.25.054000 AM +05:30  2015-05-29 

SQL> 

對於日期算術:

對於日期計算,你應該離開數據類型日期本身。你可以使用TRUNC截斷時間部分,並只留下日期部分:

例如,

SQL> alter session set nls_date_format='YYYY-MM-DD'; 

Session altered. 

SQL> SELECT SYSTIMESTAMP, TRUNC(SYSTIMESTAMP) my_tmstmp FROM DUAL; 

SYSTIMESTAMP        MY_TMSTMP 
---------------------------------------- ---------- 
29-MAY-15 11.42.41.255000 AM +05:30  2015-05-29 

SQL> 
1

當然,你可以。您可以使用「cast .. as date」將值轉換爲日期,然後截斷它(以防將格式保留爲日期)或使用to_char(如果希望將值作爲字符)。 這兩個選項的最終表現形式可能是類似的東西:

SELECT TRUNC(CAST(column AS DATE)) FROM your_table... 

SELECT TO_CHAR(column, 'yyyy-mm-dd') FROM your_table... 
+0

不需要明確地將時間戳轉換爲日期。 Trunc在時間戳上沒問題。 –

+0

@LalitKumarB,實際上它取決於數據庫版本。在較新的版本中,TIMESTAMP隱含地轉換爲DATE,然後被截斷,所以你可以使用TRUNC(TIMESTAMP) – BitLord

+0

它回到了'9.2.0.1'中,後面的版本可以進行隱式轉換。無論如何,甲骨文都會做同樣的事情,'把時間戳記投給日期'。 https://community.oracle.com/thread/374457 –

相關問題