oracle 日期函式

2022-04-09 08:18:41 字數 3826 閱讀 2527

可以用下面語句來設定oracle日期的格式

alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';

可以查詢語句格式

select * from nls_session_parameters where parameter = 'nls_date_format';

下面首先介紹sysdate 它獲取的是伺服器端的時間,

sysdate-n  這裡的n指的是天

比如sql> select sysdate-1 from dual;

sysdate-1

-----------

2012-2-18 上

這裡sysdate-1 就是1天前的時間,如果要1小時以前的則用1/24 可以計算到查詢任何時候的。

months_between(date1,date2)

是查兩個日期間相差的月數

如sql> select months_between(sysdate,to_date('2012-01-30','yyyy-mm-dd')) from dual;

months_between(sysdate,to_date

------------------------------

0.658382243130227

它是查詢的兩個時間的月數,可以用數表示的。它是第乙個時間減去第二個時間

如果 select months_between(to_date('2012-01-30','yyyy-mm-dd'),sysdate) from dual; 時間反過來,查的則是負數的月。

next_day(date,6)

下一周的時間,這裡6,代表星期5,因為美國日期是從星期天開始的,所以1代表的是星期天,2代表星期一,以此類推。

比如 我找下乙個星期二是

sql> select next_day(sysdate,3) from dual;

next_day(sysdate,3)

-------------------

2012-2-21 上午 09:54:

如果設定了日期格式,可以直接用時間串寫

sql> select next_day('2012-2-19 8:23:12',3) from dual;

next_day('2012-2-198:23:12',3)

------------------------------

2012-2-21 上午 08:23:12

last_day  本月的最後一天

sql> select last_day(sysdate) from dual;

last_day(sysdate)

-----------------

2012-2-29 上午 09:5

它是找的本月的最後一天

sql> select last_day('2011-03-12 3:23:12') from dual;

last_day('2011-03-123:23:12')

-----------------------------

2011-3-31 上午 03:23:12

⊙ round(捨入) year,month,dd,day。

⊙ trunc(切除)

在日期處理上處理四捨五入的原則分

◎ 一半以下(含一半)舍,如月份,1,2,3,4,5,6月捨棄

◎ 一半以上入,如月份7,8,9,10,11,12入

舉例說明round

sql> select round(sysdate,'year') from dual;

round(sysdate,'year')

---------------------

2012-1-1

對年進行擷取,因為是2月份,所以捨去

sql> select round(sysdate,'month') from dual;

round(sysdate,'month')

----------------------

2012-3-1

這是對月進行擷取,因為是19號,屬於下半月,就進入下個月。

sql> select round(sysdate,'dd') from dual;

round(sysdate,'dd')

-------------------

2012-2-19

dd表示對天進行捨入,現在是早點10點,屬於上班段時間。

day是對一周的時間進行捨入,不過它是從禮拜天開始的,比如今天是禮拜日,是第一天

sql> select round(sysdate,'day') from dual;

round(sysdate,'day')

--------------------

2012-2-19

但是比如昨天是禮拜6,是最後一天,屬於後半周。就會入到下週的第一天,也就是禮拜天。s

sql> select round(to_date('2012-02-18','yyyy-mm-dd'),'day') from dual;

round(to_date('2012-02-18','yy

------------------------------

2012-2-19

再介紹一下trunc

sql> select trunc(to_date('2012-02-18','yyyy-mm-dd'),'day') from dual;

trunc(to_date('2012-02-18','yy

------------------------------

2012-2-12

2月18號是星期六,它就會擷取到星期一,所以查出來的是2月12號

年月日就不舉例說明,

再介紹兩個oracle內建函式

numtoyminterval(1,'month')  month 可以換成year,

numtodsinterval(1,'day') day,hour,minute,second

這兩個函式的意思是加上你所要的時間,前面乙個數量,後面乙個是單位。

舉個例子,比如說當前時間的2天以後,可以用下列語句

sql> select sysdate + numtodsinterval(2,'day') from dual;

sysdate+numtodsinterval(2,'day

------------------------------

2012-2-21 上午 10:33:13

其它都是同樣的。

但是在numtoyminterval(1,'month')  這個和add_months 有點區別,比如今天事2月29號,這個月的最後一天,那麼再加乙個月是3月31號,還是2月29號呢,通過實驗來說明

sql> select add_months(to_date('2012-2-29','yyyy-mm-dd'),1) from dual;

add_months(to_date('2012-2-29'

------------------------------

2012-3-31

add_months 是加乙個月,這個月的月末到下個月的月末,我們再來看numtoyminterval

sql>  select to_date('2012-2-29','yyyy-mm-dd')+numtoyminterval(1,'month')  from dual;

to_date('2012-2-29','yyyy-mm-d

------------------------------

2012-3-29

它就加到了3月29,這就是它們兩個的區別。

作者 elsearch

ORACLE 日期函式

1.select to char to date 2011 5 1 yyyy mm dd day from dual 返回星期日 select to char to date 2011 5 1 yyyy mm dd day nls date language american from dual 返...

oracle日期函式

說明 用於從乙個日期值增加或減少一些月份 d代表乙個日期 n為正數則代表在d日期 上增加n 月份,n 為負數則代表在 d日期上減少n月 例 select add months sysdate,12 next year from dual 2 current date 說明 返回當前會話時區中的當前日...

oracle日期函式

oracle取上週一到週末日期的查詢語句 oracle 取上週一到週末的sql 這樣取的是 在一周內第幾天,是以週日為開始的 selectto char to date 20130906 yyyymmdd d fromdual 結果 6 注釋 2013.09.06是周五,為本週的第六天 select...