2017-04-03 116 views
0

假設當前SYSDATE是03-APR-17 03.35.49,我的查詢需要得到之間的值:四捨五入甲骨文SYSDATE到最接近的小時

一個。 SYSDATE四捨五入到最接近的通過小時(在這種情況下爲03.00.00)

b。減去1小時= 02.00.00

我試過並發現使用「-1/24」返回日期時間與扣除小時。有點新到甲骨文,所以在第一部分掙扎。 不知道我是否應該使用ROUND或FLOOR或任何其他功能。 任何幫助表示讚賞。

+0

「四捨五入」到最近的** **通過每小時不叫「四捨五入」的說法,它被稱爲「截斷」。 (然後很容易記住使用哪個功能!) – mathguy

+0

謝謝大家的幫助! – Adi

回答

4
select sysdate, 
     trunc(sysdate, 'hh') as truncated, 
     round(sysdate, 'hh') as rounded 
from dual; 

SYSDATE    TRUNCATED   ROUNDED 
------------------- ------------------- ------------------- 
04/03/2017 15:54:22 04/03/2017 15:00:00 04/03/2017 16:00:00 
1

這是截斷值:

select trunc(sysdate, 'hh') 
from dual; 

要圍着它

select trunc(sysdate + interval '30' minute, 'hh') 
from dual; 

或者:

select round(sysdate, 'hh') 
from dual; 

我忘記round()也可以採取一個format參數。

0

我的查詢需要得到之間的值:

一個。 SYSDATE四捨五入到最接近的通過小時(在這種情況下爲03.00.00)

b。一減1小時= 02.00.00

您可以使用TRUNC(date_value, format_mask)覈減的INTERVAL文字:

SELECT * 
FROM your_table 
WHERE date_column BETWEEN TRUNC(SYSDATE, 'hh24') - INTERVAL '1' HOUR 
         AND TRUNC(SYSDATE, 'hh24');