一個月的第一天
SELECT to_date(to_char(SYSDATE,'yyyy-mm')||'-01','yyyy-mm-dd')FROM dual
sysdate 為資料庫伺服器的當前系統時間。
to_char 是將日期型轉為字元型的函數。
to_date 是將字元型轉為日期型的函數,一般使用 yyyy-mm-dd hh24:mi:ss格式,當沒有指定時間部分時,則預設時間為 00:00:00
dual 表為sys使用者的表,這個表僅有一條記錄,可以用於計算一些運算式,如果有好事者用 sys 使用者登入系統,然後在 dual 表增加了記錄的話,那麼系統99.999%不能使用了。為什麼使用的時候不用 sys.dual 格式呢,因為 sys 已經為 dual 表建立了所有使用者均可使用的別名。
本月的第一天
select to_char(trunc(add_months(last_day(sysdate), -1) + 1), 'yyyy-mm-dd')
本月最後一天
select to_char(last_day(sysdate), 'yyyy-mm-dd')
一年的第一天
SELECT to_date( to_char(SYSDATE,'yyyy')||'-01-01','yyyy-mm-dd') FROM dual
季度的第一天
SELECT to_date( to_char(SYSDATE,'yyyy-')|| lpad(floor(to_number(to_char(SYSDATE,'mm'))/3)*3+1,2,'0')|| '-01', 'yyyy-mm-dd')FROM dual
floor 為向下取整
lpad 為向左使用指定的字元擴充字串,這個擴充字串至2位,不足的補'0'。
當天的半夜
SELECT trunc(SYSDATE)+1-1/24/60/60
FROM dual
trunc 是將 sysdate 的時間部分截掉,即時間部分變成 00:00:00
Oracle中日期加減是按照天數進行的,所以 +1-1/24/60/60 使時間部分變成了 23:59:59。
Oracle 8i 中僅支援時間到秒,9i以上則支援到 1/100000000 秒。
上個月的最後一天
SELECT trunc(last_day(add_months(SYSDATE,-1)))+1-1/24/60/60FROM dual
add_months 是月份加減函數。
last_day 是求該月份的最後一天的函數。
本年的最後一天
SELECT trunc( last_day(to_date(to_char(SYSDATE,'yyyy')||'-12-01','yyyy-mm-dd')) )+1-1/24/60/60FROM dual
本月的第一個星期一
SELECT next_day(to_date(to_char(SYSDATE,'yyyy-mm')||'-01','yyyy-mm-dd'), '星期一' )FROM dualnext_day 為計算從指定日期開始的第一個符合要求的日期,這裡的'星期一'將根據NLS_DATE_LANGUAGE的設定稍有不同。
去掉時分秒
select trunc(sysdate) from dual
取得某個月的天數
SELECT trunc(last_day(SYSDATE))- to_date(to_char(SYSDATE,'yyyy-mm')||'-01','yyyy-mm-dd')+ 1FROM dual
判斷是否閏年
SELECT decode( to_char(last_day(to_date(to_char(SYSDATE,'yyyy')||'-02-01','yyyy-mm-dd')),'dd'), '28','平年','閏年' )FROM dual
一個季度多少天
SELECT last_day(to_date( to_char(SYSDATE,'yyyy-')|| lpad(floor(to_number(to_char(SYSDATE,'mm'))/3)*3+3,2,'0')|| '-01','yyyy-mm-dd' ) ) - to_date( to_char(SYSDATE,'yyyy-')|| lpad(floor(to_number(to_char(SYSDATE,'mm'))/3)*3+1,2,'0')|| '-01','yyyy-mm-dd') +1FROM dual本文來自CSDN部落格,轉載請標明出處:file:///E:/知識積累/oracle/程式開發%20Oracle各種日期計算方法(收藏)%20-%20fish2008的專欄%20-%20CSDN部落格.mht