2016-03-04 91 views
1
SELECT to_date(to_char(SYSTIMESTAMP, 'MM/DD/YYYY'), 'MM/DD/YYYY') FROM DUAL; 

==> 04-MAR-16 

任何人都可以解釋爲什麼這個select語句不會導致'03/04/2016'嗎?轉換日期數據類型的時間戳

我該如何編寫自己的選擇,以便在日期類型中產生這種結果?我也嘗試過

SELECT to_date(to_char(trunc(SYSTIMESTAMP), 'MM/DD/YYYY'), 'MM/DD/YYYY') FROM DUAL 

具有相同的結果。

+0

您使用哪種環境/工具執行查詢? – trincot

+0

Oracle的sqldeveloper 4.1版 –

+0

好吧,我寫了一個答案,考慮到了這一點。 – trincot

回答

3

當日期由查詢返回並顯示時,顯然需要以某種方式進行格式化。日期類型值格式化的方式不是由查詢決定的,而是由執行查詢並顯示結果的工具決定的。

  1. 選擇菜單工具>首選項:

    在SQL開發人員的情況如下,你可以設置格式。

  2. 在Preferences對話框中,從左側面板中選擇Database> NLS。
  3. 從NLS參數列表中,輸入 「MM/DD/YYYY」
  4. 保存並關閉

又見this問題。

請注意,要將時間戳轉換爲日期,您只需要截斷它:trunc(SYSTIMESTAMP)。將它轉換爲字符串,然後返回日期是不必要的。

0

您正在將日期時間轉換爲字符串並返回日期。出於輸出目的,系統默認日期格式爲DD-MMM-YY;這是Oracle中日期的正常默認值。

重要的是要明白,日期/時間類型的內部數據結構與它們的呈現方式無關。所以,如果你想以另一種格式使用,請使用to_char()轉換爲字符串。

如果您想更改默認格式,請查看NLS_DATE_FORMAT。該文檔是here