2010-06-01 25 views
10

當前我正在使用MyTimeStampField-TRUNC(MyTimeStampField)從Oracle的時間戳列中提取時間部分。從ORACLE的TimeStamp列中提取時間部分

SELECT CURRENT_TIMESTAMP-TRUNC(CURRENT_TIMESTAMP) FROM DUAL 

這將返回

+00 13:12:07.100729

這對我的作品OK,提取時間部分來自時間戳字段,但我想知道如果有更好的方法(可能使用ORACLE的內置函數)來做到這一點?

回答

7

EXTRACT()功能如何?

+4

如果使用提取功能,應該寫的東西像'SELECT EXTRACT(一小時內,CURRENT_TIMESTAMP)|| ':'|| EXTRACT(MINUTE FROM CURRENT_TIMESTAMP)|| ':'|| EXTRACT(CURRENT_TIMESTAMP的第二個)FROM DUAL;'這對於我實際使用的方法更有效率? – RRUZ 2010-06-01 17:32:49

+0

@RRUZ如果timepart只有一個數字,也許還會加上前導零:SELECT LPAD(EXTRACT(HOUR FROM CURRENT_TIMESTAMP),2,'0')|| ':'|| LPAD(EXTRACT(MINUTE FROM CURRENT_TIMESTAMP),2,'0')|| ':'|| LPAD(EXTRACT(從CURRENT_TIMESTAMP第二位),2,'0')FROM DUAL; – 2016-05-25 12:22:26

6

你總是可以這樣做:

select TO_DATE(TO_CHAR(SYSDATE,'hh24:mi:ss'),'hh24:mi:ss') from dual 

我相信,這將帶有時間戳正常工作。

0

我認爲有問題的方法比兩個答案都更短更快。因爲它只涉及兩個數學運算,沒有複雜的解析,格式化和轉換。

2

從雙重選擇TO_DATE(TO_CHAR(SYSDATE,'hh24:mi:ss'),'hh24:mi:ss')。這給出了比實際少1小時的時間戳。

1

這可能會幫助:

Select EXTRACT(HOUR FROM (SYSDATE - trunc(sysdate)) DAY TO SECOND) From dual; 
-2
select hour(CURRENT_TIMESTAMP) 
+2

歡迎來到SO。也許你可以通過指定問題的解決方案如何更好,以及在幫助部分中正確設置代碼格式來更好地回答問題。 – 2014-07-11 18:58:36

2

你只想要日期,那麼使用

to_char(cast(SYSDATE as date),'DD-MM-YYYY') 

,如果你想只是時間再使用

to_char(cast(SYSDATE as date),'hh24:mi:ss') 

參數正在全部改爲

'DD-MM-YYYY' 

'hh24:mi:ss' 
+0

所以最後的語句應該是針對上述語句SELECT to_char(作爲日期轉換(SYSDATE作爲日期),'DD-MM-YYYY'),to_char(作爲日期轉換(SYSDATE),'hh24:mi:ss')FROM DUAL – 2015-01-27 21:09:06