2010-10-27 26 views
1

某些事件需要在年末之前發生,這是自上一事件發生後的10年。我發出這樣的查詢來計算截止日期:添加年份並移動到最後一天

SELECT 
    :previous_date AS previous_date, 
    ADD_MONTHS(
     TO_DATE(
      EXTRACT(
       YEAR FROM TO_DATE(:previous_date, 'YYYY-MM-DD HH24-MI-SS') 
      ) || '-12-31 23-59-59', 'YYYY-MM-DD HH24-MI-SS' 
     ), 12*10 
    ) AS deadline 
FROM DUAL 

如:

PREVIOUS_DATE DEADLINE     
------------- ------------------------- 
2008-07-15 31/12/2018 23:59:59 

我工作正常,到目前爲止,但...我缺少一些功能,可以使查詢更具可讀性?

回答

3

您可以使用TRUNC,讓你得到

SELECT add_months(trunc(sysdate, 'YYYY'), 12*11) - (1/86400) from dual 

的(1/1440)採用第二關11年,給你23:59:59

+0

看起來不錯。雖然我猜你會做'1/86400',不是嗎? – 2010-10-27 11:13:38

+0

對不起,1440分鐘,86400秒 – DJIDave 2010-10-27 11:17:08