oracle的日期計算(轉貼)

2021-04-15 10:08:50 字數 3581 閱讀 9657

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_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/60 from dual

add_months 是月份加減函式。

last_day 是求該月份的最後一天的函式。

本年的最後一天

select trunc(last_day(to_date(to_char(sysdate,'yyyy')||'-12-01','yyyy-mm-dd')) )+1-1/24/60/60 from dual

本月的最後一天

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

本月的第乙個星期一

select next_day( to_date(to_char(sysdate,'yyyy-mm')||'-01','yyyy-mm-dd'), '星期一' ) from dual

next_day 為計算從指定日期開始的第乙個符合要求的日期,這裡的'星期一'將根據nls_date_language的設定稍有不同。

去掉時分秒

select trunc(sysdate) from dual

顯示星期幾

select to_char(sysdate,'day') from dual

取得某個月的天數

select trunc(last_day(sysdate))- to_date(to_char(sysdate,'yyyy-mm')||'-01','yyyy-mm-dd')+ 1 from 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

1、add_months()用於從乙個日期值增加或減少一些月份

sql> select add_months(sysdate,12) "next year" from dual;

2、current_date()返回當前會放時區中的當前日期

sql> select sessiontimezone,current_date from dual;

3、current_timestamp()以timestamp with time zone資料型別返回當前會放時區中的當前日期

4、dbtimezone()返回時區

varchar_value:=dbtimezone

sql> select dbtimezone from dual;

5、extract()找出日期或間隔值的字段值

sql> select extract(month from sysdate) "this month" from dual;

sql> select extract(year from add_months(sysdate,36)) "3 years out" from dual;

sql>

6、last_day()返回包含了日期引數的月份的最後一天的日期

date_value:=last_day(date_value)

sql> select last_day(date'2000-02-01') "leap yr?" from dual;

sql> select last_day(sysdate) "last day of this month" from dual;

sql>

7、localtimestamp()返回會話中的日期和時間

timestamp_value:=localtimestamp

sql> select localtimestamp from dual;

sql> select localtimestamp,current_timestamp from dual;

sql> select localtimestamp,to_char(sysdate,'dd-mm-yyyy hh:mi:ss am') "sysdate" sql>

8、months_between()判斷兩個日期之間的月份數量

number_value:=months_between(date_value,date_value)

sql> select months_between(sysdate,date'1971-05-18') from dual;

sql> select months_between(sysdate,date'2001-01-01') from dual;

9、next_day()給定乙個日期值,返回由第二個引數指出的日子第一次出現在的日期值(應返回相應日子的名稱字串) 

oracle日期計算

取當前小時,以及相隔一小時 v begin date to date to char sysdate,yyyy mm dd hh24 yyyy mm dd hh24 v end date v begin date 1 24 執行結果 v begin date 2013 9 12 上午 09 00 0...

Oracle中日期的計算

日期格式引數含義說明 d 一周中的星期幾 day 天的名字,使用空格填充到9個字元 dd 月中的第幾天 ddd 年中的第幾天 dy 天的簡寫名 iw iso標準的年中的第幾周 iyyy iso標準的四位年份 yyyy 四位年份 yyy,yy,y 年份的最後三位,兩位,一位 hh 小時,按12小時計 ...

oracle 常用日期計算

sysdate 為資料庫伺服器的當前系統時間。to char 是將日期型轉為字元型的函式。to date 是將字元型轉為日期型的函式,一般使用 yyyy mm dd hh24 mi ss 格式,當沒有指定時間部分時,則預設時間為 00 00 00 dual 表為sys 使用者的表,這個表僅有一條記錄...