溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Oracle函數(shù)-單行函數(shù)-數(shù)字、日期、日期處理函數(shù)

發(fā)布時(shí)間:2020-06-19 06:03:33 來(lái)源:網(wǎng)絡(luò) 閱讀:776 作者:大Q小Q 欄目:關(guān)系型數(shù)據(jù)庫(kù)

Oracle函數(shù)-單行函數(shù)-數(shù)字、日期、日期處理函數(shù)


函數(shù)的分類

單行函數(shù):一個(gè)input對(duì)應(yīng)一個(gè)output,input和output存在一一對(duì)應(yīng)的關(guān)系 如lower

組函數(shù):多個(gè)input,但是只對(duì)應(yīng)一個(gè)output。如 sum()


==========================================================


單行函數(shù)

特點(diǎn):

每行返回一個(gè)結(jié)果,輸入輸出存在一一對(duì)應(yīng)的關(guān)系

能嵌套使用 ,一個(gè)函數(shù)的輸出能做另外一個(gè)函數(shù)的輸入 如:select lowner(upper('aa')) from dual;

傳入的變量可以是列的值,也可以是表達(dá)式。 如 select lower(ename) from emp;


==========================================================


1、數(shù)字函數(shù)

對(duì)數(shù)字進(jìn)行操作,是加減乘除的補(bǔ)充

SQL>select round(45.926,2) from dual;    --四舍五入,第二位保留幾個(gè)小數(shù)點(diǎn)

SQL>select trunc(45.926,2) from dual;      --直接截取,不進(jìn)行四舍五入

SQL>select mod(10,3) from dual;    --求余數(shù)



2、日期函數(shù)

oracle數(shù)據(jù)庫(kù)存儲(chǔ)日期的默認(rèn)顯示格式是DD-MON-YY

修改日期顯示格式:

alter session set nls_date_format='<需要的格式>';



3、SYSDATA:查看系統(tǒng)時(shí)間

SQL>select sysdate from dual;  --查看系統(tǒng)當(dāng)前時(shí)間

SQL>select sysdate,sysdate-7 from dual;   --減1星期

SQL>select sysdate,sysdate-1 from dual;   --減1天

SQL>select sysdate,sysdate-1/24 from dual;  --減1小時(shí)

SQL>select sysdate,sysdate-1/24/60 from dual;  --減1分鐘

SQL>select sysdate,sysdate-1/24/60/60 from dual;  --減1秒



4、日期處理函數(shù)

現(xiàn)有日期加上或者減去一個(gè)值會(huì)得到一個(gè)日期。如 select sysdate,sysdate-7 from dual;

兩個(gè)日期相減可以得到兩個(gè)日期的天數(shù)(時(shí)間間隔) 如 select (sysdate-hiredate)/7 weeks from emp;

①months_between 兩個(gè)日期之間有多少個(gè)月

SQL>select months_between(sysdate,sysdate-1000) from dual;


②add_months 指定日期下加多少個(gè)月

SQL>select add_months(sysdate,2) from dual;


③last_date 指定日期的最后一天

SQL>select last_day(sysdate) from dual; 



5、日期的四舍五入:

對(duì)年份,按照1-6月,7-12月進(jìn)行四舍五入

對(duì)月份,按照1-15,15-31日進(jìn)行四舍五入

對(duì)日,按照星期天到星期三,注意:每周的開始是星期天。


SQL> select sysdate from dual;


SYSDATE

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

16-MAY-16                       當(dāng)前是16年5月16日


==========================================================


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

----對(duì)年進(jìn)行四舍五入,也就是精確到年份,現(xiàn)在是5月,沒有過6月,所以結(jié)果為16-1-1


ROUND(SYSDATE)

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

01-JAN-16


==========================================================


SQL> select round(sysdate+60,'year') from dual;  -5月16日加60天,已經(jīng)到了7月,所以結(jié)果為17-1-1

ROUND(SYSDATE)

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

01-JAN-17


==========================================================


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

-----對(duì)月份進(jìn)行四舍五入,也就是精確到月份。現(xiàn)在是16號(hào),過了15,號(hào) 所有結(jié)果為下一個(gè)月1日

ROUND(SYSDATE)

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

01-JUN-16


==========================================================


SQL> select round(sysdate+22,'month') from dual;

----現(xiàn)在是5月16號(hào),22天后是7月7日, 7號(hào)沒有過15,所以結(jié)果為16-07-01

ROUND(SYSDATE)

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

01-JUL-16


==========================================================


SQL> !date

Mon May 16 22:47:25 CST 2016


2016年5月16日,周一,  本周的起始時(shí)間是 5月15日(每周日為一個(gè)星期的開始,周六為一個(gè)星期的結(jié)束)


==========================================================


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

----對(duì)日進(jìn)行四舍五入,也就是看星期幾 5月16日是星期一,沒過星期三,所以不“進(jìn)位”,顯示本周第一天


ROUND(SYSDATE)

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

15-MAY-16


==========================================================


SQL>select round(sysdate+3,'day') from dual;

----16日是星期一,加三天就是星期四,超過了星期三,所以進(jìn)位,顯示下一周的星期一  


==========================================================


SQL>select round(sysdate-3,'day') from dual;

----星期一減三天是上個(gè)星期的星期五,超過了星期三,所以進(jìn)位,顯示當(dāng)前周的下一個(gè)星期一,也就是15號(hào)



向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI