2012-03-02 132 views
2

我想創建一個可以2日期間減去一個功能,但我有一些問題:日期/時間在甲骨文 - 日期時間函數

首先與日期的存儲,並其次功能。

這裏是我的存儲日期到表代碼:

CREATE TABLE car_info 
    (
    car_id NUMBER(4) 
    arrival DATE, 
    departure DATE 
    ...... 
) 

在這裏,我有救到達/離開倍日期。理想情況下,我會在DD-MON-YYY-HH-MM-SS的格式,希望它

這是我遇到我的第一個問題:

INSERT INTO car_info 
VALUES('0001', to_date('12-jun-2006 06:00:01'), to_date('14-jun-2006 09:00:01') 

從我所做的研究,這似乎是正確的?

但是如果我做了SELECT * FROM car_info,這是結果:

car_id  arrival_date  departure_date 
    1   12-jun-2006  14-jun-2006 

有誰知道它爲什麼不顯示結果作爲一個完整的日期和時間?

要停止這篇文章得到太充分的信息,一旦我解決了這個問題,我會發布我的問題與功能。

感謝所有幫助

kihd問候,達倫

問題的第二部分已被轉移到Oracle sql - date subtraction within a function

+0

請問作爲一個單獨的問題的功能;文森特已經回答了關於插頁的原始問題。問一個以上的東西被認爲是不好的形式,而一旦回答的人就會少得多再看一遍。 – 2012-03-02 11:55:24

+0

如果你問一個新問題,節省時間; '顯示錯誤函數get_duration'會給你提供什麼是錯的信息,你可能想要包含哪些信息;你應該顯示你想讓調用者看到返回的內容 - 如果你真的想要返回一個格式化的字符串,以及它究竟應該如何看待'x天,y小時,z分鐘'。一些示例數據和預期輸出會很好。 – 2012-03-02 12:19:45

+0

謝謝Alex,我會重新發布這個功能的下一部分,然後我仍然在掙扎。感謝您的幫助 – DarrenJ65 2012-03-02 12:30:11

回答

3

DATE在Oracle是一個時間點,它不被存儲用格式。日期顯示時選擇一種格式,以便人們可以理解它。

日期默認情況下會顯示,按您的NLS_DATE_FORMAT的設置。你可以用下面的命令更改此設置:

ALTER SESSION SET NLS_DATE_FORMAT='dd-mon-yyyy hh24:mi:ss'; 

您還可以在查詢中使用TO_CHAR要求一個明確的格式:二進制內部表示

SELECT to_char(arrival, 'dd-mon-yyyy hh24:mi:ss') 
    FROM car_info 
+0

謝謝您的幫助,(到達'dd-mon-yyyy hh24:mi:ss'),這對我來說非常合適 – DarrenJ65 2012-03-02 10:42:28

2

日期列是在7個字節編碼的數據庫中保存,而不是一個格式化的字符串。當您從數據庫中選擇一個DATE列時,您使用的客戶端工具必須將其格式化爲以有意義的方式顯示它。它使用默認格式掩碼執行此操作。您如何設置取決於您使用的工具。在SQL Plus中,您可以這樣做:

alter session set nls_date_format='DD-MON-YYYY HH24:MI:SS'; 

或者您可以使用TO_CHAR格式化查詢中的日期yoursefl。

2

甲骨文店日期,以便你如何輸入它們,並且可以在會話,數據庫或查詢級別設置檢索它們的格式。

插入,以防止任何隱式轉換錯誤時,你應該明確地普遍格式化日期:

INSERT INTO car_info 
VALUES('0001', 
     to_date('12-jun-2006 06:00:01'), 
     to_date('14-jun-2006 09:00:01')) 

應該是:

INSERT INTO car_info 
VALUES('0001', 
     to_date('12-jun-2006 06:00:01', 'dd-mon-yyyy hh24:mi:ss'), 
     to_date('14-jun-2006 09:00:01', 'dd-mon-yyyy hh24:mi:ss')) 

編輯:用於Oracle的日期格式模型等都是here