oracle sysdate日期相關操作

2021-08-27 21:08:17 字數 3363 閱讀 6465

由於最近兩天在做一些資料統計分析,經常用到oracle資料庫中一些日期操作,現在重新整理一下。

--獲取當前日期

select sysdate from dual;

--獲取昨天日期

select sysdate - 1 from dual;

--獲取明天日期

select sysdate + 1 from dual;

--獲取當前日期時間戳(秒級別)

select (sysdate - to_date('1970-1-1 8', 'yyyy-mm-dd hh24')) * 86400

from dual;

--秒級別時間戳轉換成日期

select to_char(1536656866 / (60 * 60 * 24) +

to_date('1970-01-01 08:00:00', 'yyyy-mm-dd hh24:mi:ss'),

'yyyy-mm-dd hh24:mi:ss')

from dual;

--獲取當前日期時間戳(毫秒級別)

select (sysdate - to_date('1970-1-1 8', 'yyyy-mm-dd hh24')) * 86400000 +

to_number(to_char(systimestamp(3), 'ff'))

from dual;

--毫秒級別時間戳轉換成日期

select to_char(1536657264670 / (60 * 60 * 24 * 1000) +

to_date('1970-01-01 08:00:00', 'yyyy-mm-dd hh24:mi:ss'),

'yyyy-mm-dd hh24:mi:ss')

from dual;

-- 獲取上乙個小時的開始時間

select to_date(to_char(sysdate, 'yyyy-mm-dd') ||

(to_char(sysdate, 'hh24') - 1),

'yyyy-mm-dd hh24')

from dual;

-- 獲取本小時的開始時間

select to_date(to_char(sysdate, 'yyyy-mm-dd') || (to_char(sysdate, 'hh24')),

'yyyy-mm-dd hh24')

from dual;

--獲取當前日期0點

select to_char(trunc(sysdate), 'yyyy/mm/dd hh24:mi:ss') from dual;

--時間戳

select (trunc(sysdate) - to_date('1970-1-1 8', 'yyyy-mm-dd hh24')) * 86400

from dual;

--獲取當前日期24點

select trunc(sysdate + 1) - 1 / 24 / 60 / 60 from dual;

--時間戳

select (trunc(sysdate + 1) - 1 / 24 / 60 / 60 -

to_date('1970-1-1 8', 'yyyy-mm-dd hh24')) * 86400

from dual;

--本週禮拜一0點

select trunc(sysdate, 'd') + 1 from dual;

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

--本週禮拜日24點

select trunc(sysdate, 'd') + 1 + 7 - 1 / 24 / 60 / 60 from dual;

select trunc(sysdate, 'iw') + 7 - 1 / 24 / 60 / 60 from dual;

--上週禮拜一0點

select trunc(sysdate, 'd') - 7 + 1 from dual;

select trunc(sysdate, 'iw') - 7 from dual;

--上週禮拜日24點

select trunc(sysdate, 'd') + 1 - 1 / 24 / 60 / 60 from dual;

select trunc(sysdate, 'iw') - 1 / 24 / 60 / 60 from dual;

--下週禮拜一0點

select trunc(sysdate, 'd') + 7 + 1 from dual;

select trunc(sysdate, 'iw') + 7 from dual;

--下週禮拜日24點

select trunc(sysdate + 7, 'd') + 7 + 1 - 1 / 24 / 60 / 60 from dual;

select trunc(sysdate, 'iw') + 7 - 1 / 24 / 60 / 60 from dual;

--獲取本月第一天

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

--獲取本月最後一天

select last_day(trunc(sysdate)) from dual;

--下月第一天

select last_day(trunc(sysdate)) + 1 from dual;

select add_months(trunc(sysdate, 'mm'), 1) from dual;

--下月最後一天

select last_day(trunc(sysdate)) + 1 from dual;

select add_months(last_day(trunc(sysdate)), 1) from dual;

--上月第一天

select add_months(trunc(sysdate, 'mm'), -1) from dual;

--上月最後一天

select add_months(last_day(trunc(sysdate)), -1) from dual;

--本季第一天

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

--本季最後一天

select add_months(trunc(sysdate, 'q'), 3) - 1 from dual;

--本年第一天

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

--本年最後一天

Oracle sysdate 時間慢了!

最近發現乙個問題,乙個9i跑在redhat5的,居然 select sysdate from dual 出來的時間和實際時間差了幾分鐘,因為基於這個oracle的系統時間正確性還是有點要求的。所以只能 date s 2010 2 10 8 55 00 了,再 clock w 寫入coms 注意修改時...

Oracle sysdate時間加減

select sysdate,add months sysdate,12 from dual 加1年 select sysdate,add months sysdate,1 from dual 加1月 select sysdate,to char sysdate 7,yyyy mm dd hh24 ...

日期類 日期差值

題目描述 有兩個日期,求兩個日期之間的天數,如果 兩個日期是連續的我們規定他們之間的天數為兩天。輸入 有多組資料,每組資料有兩行,分別表示兩個日期,形式為yyyymmdd。輸出 每組資料輸出一行,即日期差值。樣例輸入 20110412 20110422 樣例輸出 日期類問題是常考的基本題型之一,需要...