2012-03-18 157 views
1

我正在爲數據庫生成虛擬數據,其中一個屬性使用的是TIMESTAMP(6)TIMESTAMP(6)Oracle插入

任何人都可以給我一個值的例子嗎?

此外,我想能夠沿着

03/18/2012 02:35 AM

插入日期,使其看起來像

INSERT INTO FLIGHT VALUES (1,'London Heathrow','Miami Airport','03/18/2012 02:35 AM','04/18/2012 13:35 PM'); 

這可能嗎?非常感謝......

編輯----

我怎樣才能擺脫時間戳列海量空間

space

+0

我使用'TIMESTAMP(0)',但不知何故dept_time列有一個巨大的空間,看到上面的PIC,我怎樣才能擺脫這種? – 2012-03-18 05:12:38

+2

您的編輯提出了另一個問題。 SO旨在爲重點突出的問題提供獨立的答案。如果您有新問題,請提出一個新問題。問問題不收費,而且你更有可能得到答案(儘管我注意到賈斯汀在他的回答中實際上已經解決了你的第二個問題)。 – APC 2012-03-18 09:15:09

+0

好吧生病記住,但是這兩個有點相關,我沒有看到重點開了一個新的問題,謝謝賈斯汀他是一個王牌;) – 2012-03-18 12:30:26

回答

6

每當你面對的DATETIMESTAMP數據類型,應始終插入DATETIMESTAMP值。您不應該插入字符串並依靠隱式轉換將字符串轉換爲DATETIMESTAMP。您應該明確地撥打TO_DATETO_TIMESTAMP。您的INSERT聲明還應明確列出您要插入的列的名稱。

你會希望你的INSERT語句看起來像這樣

INSERT INTO FLIGHT(<<list of columns>>) 
    VALUES (1, 
     'London Heathrow', 
     'Miami Airport', 
     to_timestamp('03/18/2012 02:35 AM', 'MM/DD/YYYY HH:MI AM'), 
     to_timestamp('04/18/2012 13:35 PM', 'MM/DD/YYYY HH:MI AM')); 

您可以調整的SQL * Plus如何通過改變格式掩碼顯示在一個特定的列中的數據。例如,

SQL> column dept_time format a30; 
SQL> column arrv_time format a30; 

會導致SQL * Plus的顯示在30個水平字符(您當前NLS_TIMESTAMP_FORMAT似乎產生28個字符串,如果你改變NLS_TIMESTAMP_FORMAT,您可能要更改列的寬度都DEPT_TIMEARRV_TIME你'要求顯示SQL * Plus)。

+0

再次感謝賈斯汀,所以時間戳和日期實際上是相同? – 2012-03-18 03:18:30

+0

@JoseDavidGarciaLlanos - 「DATE」存儲時間到秒。 'TIMESTAMP'最多可以存儲9位小數秒。您還可以聲明一個'TIMESTAMP WITH TIME ZONE'或'TIMESTAMP WITH LOCAL TIME ZONE'來存儲時區,以便您可以將時間從一個時區轉換爲另一個時區。 – 2012-03-18 03:28:29

+0

啊好的,謝謝,我收到大量的未使用的空間,這些列使用時間戳,你可以看到它在上面的圖片。這是可以修復的,或者應該是這樣。謝謝Justin – 2012-03-18 05:15:32

1

請看看下面的例子:

ALTER SESSION SET nls_timestamp_format = 'YYYY-MM-DD HH24:MI:SS'; 

SELECT * 
FROM orders 
WHERE ordered_at 
    BETWEEN '2013-10-06 12:00:00' 
     AND '2013-10-06 16:00:00'