2014-12-26 59 views
5

我在Oracle中有一個TIMESTAMP(6)字段,我需要從時間中刪除毫秒組件。從oracle tmstmp字段中刪除毫秒

比如我有

10/20/2014 10:34:06.356000 AM 

,我想刪除毫秒,使我有

10/20/2014 10:34:06 AM 

你知不知道這樣做的最好方法是什麼?

謝謝!

回答

1

試試這個

SELECT TO_CHAR(SYSDATE, 'MM-DD-YYYY HH24:MI:SS') "NOW" 
FROM DUAL; 

如果需要12小時日期格式

SELECT TO_CHAR(SYSDATE, 'MM-DD-YYYY HH:MI:SS AM') "NOW" 
FROM DUAL; 

SQL FIDDLE

+0

這個工程,但我需要的是一個時間戳(0)。當我運行你的代碼時,我失去了AM/PM,並且時間失去了GMT格式。它可以轉換爲時間戳(0)嗎?那麼它可能工作 – user3022875

+0

如果你需要AM/PM 12小時格式,然後使用第二個查詢 – HaveNoDisplayName

+0

但這仍然是一個CHAR。我需要它時間戳(0)。那可能嗎? – user3022875

3

這個怎麼樣?

select cast(col as timestamp(0)) 

編輯:

避免舍入最簡單的方法是使用trunc()或減去半秒:

select cast(col - 0.5/(24*60*60) as timestamp(0)) 
+0

這個工作,但它確實四捨五入。有沒有辦法讓它不圓,只是毫不費力地去除毫秒? – user3022875

-2

這可能幫助!

select substr(to_char('10/20/2014 10:34:06.356000 AM'),1,instr(to_char('10/20/2014 10:34:06.356000 AM'),'.')-1)||' '|| 
substr(to_char('10/20/2014 10:34:06.356000 AM'),-2,instr(to_char('10/20/2014 10:34:06.356000 AM'),'.')-1) "Date" 
from dual; 
0

您可以將它轉換爲沒有小數秒時間戳(這將四捨五入到最接近的第二個):

CAST(your_timestamp AS TIMESTAMP(0)) 

或一個DATE數據類型(這將截斷精確到秒):

CAST(your_timestamp AS DATE) 

如果你想把它當作一個數據類型,然後將它轉換回:

CAST(CAST(your_timestamp AS DATE) AS TIMESTAMP(0)) 

或者你可以將其轉換爲一個格式化字符串,並指定要使用(這將截斷精確到秒)格式的模型:

TO_CHAR(your_timestamp, 'YYYY-MM-DD HH24:MI:SS') 

像這樣:

SQL Fiddle

的Oracle 11g R2架構設置

CREATE TABLE your_table (your_timestamp) AS 
    SELECT TIMESTAMP '2017-10-25 12:53:12.10076' FROM DUAL; 

查詢1

SELECT CAST(your_timestamp AS TIMESTAMP(0)) AS "Timestamp", 
     CAST(your_timestamp AS DATE) AS "Date", 
     TO_CHAR(your_timestamp, 'DD-MM-YYYY HH24:MI:SS') AS "String" 
FROM your_table 

Results

|    Timestamp |     Date |    String | 
|-----------------------|----------------------|---------------------| 
| 2017-10-25 12:53:12.0 | 2017-10-25T12:53:12Z | 25-10-2017 12:53:12 | 

記:如何TIMESTAMPDATE輸出的格式將取決於您NLS_TIMESTAMP_FORMATNLS_DATE_FORMAT會話參數,但可以直接當您指定格式模型時,控制格式TO_CHAR