天天看點

oracle 函數學習 Oracle10g學習系列(7)

Oracle函數有字元函數、數學函數、日期函數和轉換函數。我隻了解了字元函數和數學函數。

一、字元函數:

lower(char)  将字元串轉化為小寫的格式

SQL> select lower(ename),ename from emp;

LOWER(ENAME) ENAME

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

smith        SMITH

allen        ALLEN

ward         WARD

upper(char)  将字元串轉化為大寫的格式

SQL> select upper(ename),ename from emp;

UPPER(ENAME) ENAME

SMITH        SMITH

ALLEN        ALLEN

WARD         WARD

initcap(char)将字元串首字母轉化為大寫的格式

SQL> select initcap(ename),ename from emp;

INITCAP(ENAME) ENAME

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

Smith          SMITH

Allen          ALLEN

Ward           WARD

substr(char,m,n) 取字元串的子串,從第2位開始取,取3位。m是從第m個開始取,取字元串的子串n代表取n個的意思,不是代表取到第n個

SQL> select substr(ename,2,3),ename from emp;

SUBSTR(ENAME,2,3) ENAME

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

MIT               SMITH

LLE               ALLEN

ARD               WARD

length(char) 傳回字元串的長度,HelloWorld一共有10位。截取了ename等于5的名字,隻有兩個ward的長度是4,是以沒有列出來

SQL> select length('HelloWorld') from tb2;

LENGTH('HELLOWORLD')

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

                  10

SQL> select ename from emp where length(ename)=5;

ENAME

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

SMITH

ALLEN

replace(char1,search_string,replace_string) 替換函數,把A替換成bob

SQL> select replace(ename,'A','bob'),ename from emp;

REPLACE(ENAME,'A','BOB')       ENAME

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

SMITH                          SMITH

bobLLEN                        ALLEN

WbobRD                         WARD

instr(char1,char2,[,n[,m]])取子串在字元串的位置,W在第6個位置

SQL> select instr('HelloWorld','W') from tb2;

INSTR('HELLOWORLD','W')

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

                      6

二、數學函數:

數學函數的輸入參數和傳回值的資料類型都是數字類型的。對數字的處理,在财務系統或銀行系統中用的最多,不同的處理方法,對财務報表有不同的結果。數學函數包括cos,cosh,exp,ln, log,sin,sinh,sqrt,tan,tanh,acos,asin,atan,round,這裡講最常用的:

round(n,[m])該函數用于執行四舍五入,如果省掉m,則四舍五入到整數,如果m是正數,則四舍五入到小數點的m位後。如果m是負數,則四舍五入到小數點的m位前。 

四舍五入到第1位

SQL>select round(sal),sal from emp;

ROUND(SAL)       SAL

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

       800    800.34

      1601   1600.56

      1251   1250.78

SQL>select round(sal,1),sal from emp;

       800.3    800.34

      1600.6   1600.56

      1250.8   1250.78

      1600   1600.56

      1250   1250.78

SQL>select round(sal,1),sal from emp;

      1600.5   1600.56

      1250.7   1250.78

左側1位四舍五入

SQL> select round(211.5, -1) from dual;

ROUND(211.5,-1)

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

            210

SQL> select round(215.5, -1) from dual;

ROUND(215.5,-1)

            220

左側2位四舍五入

SQL> select round(211.5, -2) from dual;

ROUND(211.5,-2)

            200

SQL> select round(261.5, -2) from dual;

ROUND(261.5,-2)

            300

trunc(n,[m]) 該函數用于截取數字。如果省掉m,就截去小數部分,如果m是正數就截取到小數點的m位後,如果m是負數,則截取到小數點的前m位。 

SQL> select trunc(45.923,2),trunc(45.923),trunc(45.923,-2) from dual;

TRUNC(45.923,2) TRUNC(45.923) TRUNC(45.923,-2)

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

          45.92            45                0

SQL> select trunc(45.923,2),trunc(45.923),trunc(45.923,-1) from dual;

TRUNC(45.923,2) TRUNC(45.923) TRUNC(45.923,-1)

          45.92            45               40

mod(m,n),求餘數。取值是m/n的餘數

SQL> select mod(10,2) from dual;

 MOD(10,2)

----------

floor(n) 傳回小于或是等于n的最大整數

SQL> select floor(sal),sal from tb2;

FLOOR(SAL)        SAL

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

       500     500.34

       500     500.56

       585     585.56

ceil(n) 傳回大于或是等于n的最小整數

SQL> select ceil(sal),sal from tb2;

 CEIL(SAL)        SAL

       501     500.34