需要您的幫助才能結束查詢以獲取sysdate月份的上次日期時間。月份的最後日期
select to_char(last_day(sysdate),'DD-Mon-YYYY HH24:MI:SS') from dual
它給預期最後日期,但我需要時間23:59:00
這是不可能的直通上面的查詢。
需要您的幫助才能結束查詢以獲取sysdate月份的上次日期時間。月份的最後日期
select to_char(last_day(sysdate),'DD-Mon-YYYY HH24:MI:SS') from dual
它給預期最後日期,但我需要時間23:59:00
這是不可能的直通上面的查詢。
你可以使用TRUNC在第二天即SYSDATE + 1
,然後減去60
秒即60/86400
以獲得所需的輸出。
SQL> SELECT to_char((trunc(last_day(sysdate)) +1) - 60/86400,'DD-Mon-YYYY HH24:MI:SS') dt
2 FROM dual;
DT
--------------------
29-Feb-2016 23:59:00
SQL>
你也可以使用interval '1' minute
或interval '60' second
代替60/86400
。
如果你只是想爲出於某種原因顯示你可以硬編碼的時間到格式掩碼:
select to_char(last_day(sysdate), 'DD-Mon-YYYY "23:59:00"') from dual;
但你可能真的想它作爲一個日期對象,在這種情況下你可以添加23小時59分鐘到截斷(午夜)爲止,wchi是一天1440分鐘1439:
select to_char(trunc(last_day(sysdate)) + 1439/1440, 'DD-Mon-YYYY HH24:MI:SS')
from dual;
或者你可以去到第二天,並刪除了一分鐘,要麼分數天或間隔:
select to_char(trunc(last_day(sysdate)) + interval '1' day - interval '1' minute,
'DD-Mon-YYYY HH24:MI:SS') from dual;
一般來說,如果你有時間段的工作,你要包括高達23:59:59,您也可以做任何的這些方法,但作爲Damien_The_Unbeliever在評論說,它更容易與下一個時期的開始比較(例如, < add_months(trunc(sysdate, 'MM'), 1)
。由於沒有適當考慮時間,尤其是在實際上有時間戳而不是日期的情況下,意外地錯過部分時間很容易。
如果您正在嘗試定義範圍,則幾乎總是能夠更容易地計算*獨佔*端點。例如。使用下個月的第一天(容易計算),並使用'<'而不是'<='。 –