Oracle單行函數(shù)

查詢(xún)

 select *from emp where ename=UPPER('&inputname');
輸入 inputname 的值:  smith
原值    1: select *from emp where ename=UPPER('&inputname')
新值    1: select *from emp where ename=UPPER('smith')

     EMPNO ENAME                JOB                       MGR HIREDATE              SAL       COMM     DEPTNO
---------- -------------------- ------------------ ---------- -------------- ---------- ---------- ----------
      7369 SMITH                CLERK                    7902 17-12月-80            800                 20

字符串函數(shù)

字符串 UPPER(列|字符串)  將所有字符串變?yōu)榇髮?xiě)
字符串 LOWER(列|字符串)  將所有字符串變?yōu)榇髮?xiě)
字符串 INITCAP(列|字符串)  開(kāi)頭字母大寫(xiě),其余全部小寫(xiě)
數(shù)字 LENGTH(列|字符串)  取得字符串長(zhǎng)度
字符串 SUBSTR(列|字符串,開(kāi)始索引,[長(zhǎng)度]) 截取字符串,若沒(méi)有設(shè)置長(zhǎng)度,則從開(kāi)始截取到結(jié)尾
字符串 REPLACE(列|字符串,舊內(nèi)容,新內(nèi)容)  新內(nèi)容替換舊內(nèi)容

UPPER

select upper('hello') from dual;   //專(zhuān)供查詢(xún)的dual為虛表

UPPER('HEL
----------
HELLO

LOWER

 select lower (ename) from emp;

LOWER(ENAME)
--------------------
smith
allen
ward
jones
martin
blake
clark
scott
king
turner
adams
james
ford
miller
已選擇14行。

INITCAP

 select ename,initcap(ename) from emp;

ENAME                INITCAP(ENAME)
-------------------- --------------------
SMITH                Smith
ALLEN                Allen
WARD                 Ward
JONES                Jones
MARTIN               Martin
BLAKE                Blake
CLARK                Clark
SCOTT                Scott
KING                 King
TURNER               Turner
ADAMS                Adams
JAMES                James
FORD                 Ford
MILLER               Miller

已選擇14行。

LENGTH

 select length('djdjjdjdjskskks') from dual;

LENGTH('DJDJJDJDJSKSKKS')
-------------------------
                       15
-------------查詢(xún)姓名長(zhǎng)度為5的雇員信息-------------
select *from emp where length(ename)=5;

     EMPNO ENAME                JOB                       MGR HIREDATE              SAL       COMM     DEPTNO
---------- -------------------- ------------------ ---------- -------------- ---------- ---------- ----------
      7369 SMITH                CLERK                    7902 17-12月-80            800                 20
      7499 ALLEN                SALESMAN                 7698 20-2月 -81           1600        300      30
      7566 JONES                MANAGER                  7839 02-4月 -81           2975                 20
      7698 BLAKE                MANAGER                  7839 01-5月 -81           2850                 30
      7782 CLARK                MANAGER                  7839 09-6月 -81           2450                 10
      7788 SCOTT                ANALYST                  7566 19-4月 -87           3000                 20
      7876 ADAMS                CLERK                    7788 23-5月 -87           1100                 20
      7900 JAMES                CLERK                    7698 03-12月-81            950                 30

已選擇8行。

SUBSTR(Oracle默認(rèn)從1開(kāi)始而不是0)

 select substr('helloworld',6) from dual;
SUBSTR('HE
----------
world
---------------------------------------------------------
select substr('helloworld',1,5) from dual;
SUBSTR('HE
----------
hello
---------------------------------------------------------
select ename,substr(ename,1,3) from emp;

ENAME                SUBSTR(ENAME,1,3)
-------------------- ------------------------
SMITH                SMI
ALLEN                ALL
WARD                 WAR
JONES                JON
MARTIN               MAR
BLAKE                BLA
CLARK                CLA
SCOTT                SCO
KING                 KIN
TURNER               TUR
ADAMS                ADA
JAMES                JAM
FORD                 FOR
MILLER               MIL
--------------------從后面截取--------------
select ename,substr(ename,length(ename)-2) from emp;
select ename,substr(ename,-3) from emp;
ENAME                SUBSTR(ENAME,LENGTH(ENAME)-2)
-------------------- --------------------------------------------------------------------------------
SMITH                ITH
ALLEN                LEN
WARD                 ARD
JONES                NES
MARTIN               TIN
BLAKE                AKE
CLARK                ARK
SCOTT                OTT
KING                 ING
TURNER               NER
ADAMS                AMS
JAMES                MES
FORD                 ORD
MILLER               LER

數(shù)值函數(shù)

數(shù)字 ROUND (列 | 數(shù)字 [,小數(shù)位])  實(shí)現(xiàn)數(shù)據(jù)的四舍五入,可以設(shè)置保留小數(shù)位
----------------------------------------------------------------------------------------
數(shù)字 TRUNC (列 | 數(shù)字 [,小數(shù)位])  實(shí)現(xiàn)數(shù)據(jù)的截取,即不進(jìn)位
----------------------------------------------------------------------------------------
數(shù)字 MOD(列 | 數(shù)字 ,列 | 數(shù)字)   求模(計(jì)算余數(shù))

ROUND(會(huì)進(jìn)位)

select round(789.36544555) from dual;
ROUND(789.36544555)
-------------------
                789
---------------------------------------------------------
select round(256.55555555,2) from dual;
ROUND(256.55555555,2)
---------------------
               256.56

TRUNC(不會(huì)進(jìn)位)

select trunc(225.658255,2) from dual;
TRUNC(225.658255,2)
-------------------
             225.65
---------------------------------------------------------
select trunc(225.658255) from dual;
TRUNC(225.658255)
-----------------
              225

MOD

 select mod(10,3) from dual;
 MOD(10,3)
----------
         1

日期函數(shù)


偽列: SYSDATE SYSTIMESTAMP
模糊日期操作公式:
日期+數(shù)字=日期(若干天之后的日期)
日期-數(shù)字=日期(若干天之前的日期)
日期-日期=數(shù)字(天數(shù))

select sysdate from dual;
SYSDATE
--------------
04-4月 -17
select systimestamp from dual;

SYSTIMESTAMP
---------------------------------------------------------------------------
04-4月 -17 09.34.09.223000 上午 +08:00

日期操作(7天前,120天之后)

 select sysdate-7,sysdate+120 from dual;
SYSDATE-7      SYSDATE+120
-------------- --------------
28-3月 -17     02-8月 -17

查詢(xún)?nèi)肼毴掌?/p>

 select empno,ename,sal,job,sysdate-hiredate from emp;
     EMPNO ENAME                       SAL JOB                SYSDATE-HIREDATE
---------- -------------------- ---------- ------------------ ----------------
      7369 SMITH                       800 CLERK                    13257.4062
      7499 ALLEN                      1600 SALESMAN                 13192.4062
      7521 WARD                       1250 SALESMAN                 13190.4062
      7566 JONES                      2975 MANAGER                  13151.4062
      7654 MARTIN                     1250 SALESMAN                 12972.4062
      7698 BLAKE                      2850 MANAGER                  13122.4062
      7782 CLARK                      2450 MANAGER                  13083.4062
      7788 SCOTT                      3000 ANALYST                  10943.4062
      7839 KING                       5000 PRESIDENT                12922.4062
      7844 TURNER                     1500 SALESMAN                 12992.4062
      7876 ADAMS                      1100 CLERK                    10909.4062
      7900 JAMES                       950 CLERK                    12906.4062
      7902 FORD                       3000 ANALYST                  12906.4062
      7934 MILLER                     1300 CLERK                    12855.4062

準(zhǔn)確計(jì)算公式

日期 AND_MONTHS(列 | 日期,月數(shù))    在指定日期上增加若干月之后的日期
數(shù)字  MONTHS_BETWEEN(列|日期,列|日期)      返回兩個(gè)日期之間所經(jīng)歷的月數(shù)
日期 LAST_DAY(列|日期)    取得所在日期月的最后一天
日期 NEXT_DAY(列|日期,星期X)  返回下一個(gè)指定的一周時(shí)間數(shù)對(duì)應(yīng)的日期

4個(gè)月之后

 select add_months(sysdate,4) from dual;
ADD_MONTHS(SYS
--------------
04-8月 -17
----------------------------------------------------
 select add_months(sysdate,4),add_months(sysdate,20) from dual;
ADD_MONTHS(SYS ADD_MONTHS(SYS
-------------- --------------
04-8月 -17     04-12月-18

MONTHS_BETWEEN

 select empno,ename,hiredate,months_between(sysdate,hiredate) from emp;
     EMPNO ENAME                HIREDATE       MONTHS_BETWEEN(SYSDATE,HIREDATE)
---------- -------------------- -------------- --------------------------------
      7369 SMITH                17-12月-80                            435.59685
      7499 ALLEN                20-2月 -81                           433.500076
      7521 WARD                 22-2月 -81                            433.43556
      7566 JONES                02-4月 -81                           432.080721
      7654 MARTIN               28-9月 -81                           426.242012
      7698 BLAKE                01-5月 -81                           431.112979
      7782 CLARK                09-6月 -81                           429.854915
      7788 SCOTT                19-4月 -87                           359.532334
      7839 KING                 17-11月-81                            424.59685
      7844 TURNER               08-9月 -81                           426.887173
      7876 ADAMS                23-5月 -87                           358.403302
      7900 JAMES                03-12月-81                           424.048463
      7902 FORD                 03-12月-81                           424.048463
      7934 MILLER               23-1月 -82                           422.403302

LAST_DAY

//查詢(xún)當(dāng)前月的最后一天
 select last_day(sysdate) from dual;
LAST_DAY(SYSDA
--------------
30-4月 -17
-------------------------------------------------------
//查詢(xún)所有在雇傭所在月倒數(shù)前三天的雇員信息   where 篩選作用
 select empno,ename,hiredate,last_day(hiredate)-2 from emp where hiredate=last_day(hiredate)-2;
     EMPNO ENAME                HIREDATE       LAST_DAY(HIRED
---------- -------------------- -------------- --------------
      7654 MARTIN               28-9月 -81     28-9月 -81

NEXT_DAY(返回當(dāng)前日期下周X所對(duì)應(yīng)的日期)

 select next_day(sysdate,'星期二') from dual;
NEXT_DAY(SYSDA
--------------
11-4月 -17

以年月日的形式計(jì)算出每個(gè)雇員到現(xiàn)在的雇傭時(shí)間

日期圖
 select empno,ename,hiredate,
  2  trunc(months_between(sysdate,hiredate)/12) years,
  3  trunc(mod(months_between(sysdate,hiredate),12)) months,
  4  trunc(sysdate-add_months(hiredate,months_between(sysdate,hiredate))) days
  5  from emp;
     EMPNO ENAME                HIREDATE            YEARS     MONTHS       DAYS
---------- -------------------- -------------- ---------- ---------- ----------
      7369 SMITH                17-12月-80             36          3         18
      7499 ALLEN                20-2月 -81             36          1         15
      7521 WARD                 22-2月 -81             36          1         13
      7566 JONES                02-4月 -81             36          0          2
      7654 MARTIN               28-9月 -81             35          6          7
      7698 BLAKE                01-5月 -81             35         11          3
      7782 CLARK                09-6月 -81             35          9         26
      7788 SCOTT                19-4月 -87             29         11         16
      7839 KING                 17-11月-81             35          4         18
      7844 TURNER               08-9月 -81             35          6         27
      7876 ADAMS                23-5月 -87             29         10         12
      7900 JAMES                03-12月-81             35          4          1
      7902 FORD                 03-12月-81             35          4          1
      7934 MILLER               23-1月 -82             35          2         12

轉(zhuǎn)換函數(shù)

字符串 TO_CHAR(列|日期|數(shù)字,轉(zhuǎn)換格式)   將日期或數(shù)字轉(zhuǎn)換成指定結(jié)構(gòu)的字符串
日期 TO_DATE(列|字符串,轉(zhuǎn)換格式)   按照指定的轉(zhuǎn)換格式編寫(xiě)字符串后將其變?yōu)槿掌谛蛿?shù)據(jù)
數(shù)字 TO_NUMBER(列|字符串)   將字符串變?yōu)閿?shù)字

一、TO_CHAR
轉(zhuǎn)換格式

日期:年(yyyy)、月(mm)、日(dd);
時(shí)間:時(shí)(hh、hh24)、分(mi)、秒(ss);
數(shù)字:任意數(shù)字(9)、本地貨幣符號(hào)(L)。

轉(zhuǎn)換當(dāng)前日期

SQL> select to_char(sysdate,'yyyy-mm-dd') from dual;
TO_CHAR(SYSDATE,'YYY
--------------------
2017-04-08
------------------------------------------------
SQL> select to_char(sysdate,'yyyy-mm-dd hh:mi:ss') from dual;

TO_CHAR(SYSDATE,'YYYY-MM-DDHH:MI:SS')
--------------------------------------
2017-04-08 03:36:17
-------------------------------------------------
SQL> select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;
TO_CHAR(SYSDATE,'YYYY-MM-DDHH24:MI:SS'
--------------------------------------
2017-04-08 15:37:28

日期數(shù)據(jù)的拆分

SQL> select to_char(sysdate,'yyyy'),to_char(sysdate,'mm'),to_char(sysdate,'dd') from dual;
TO_CHAR( TO_C TO_C
-------- ---- ----
2017     04   08

查詢(xún)?cè)诙路莨蛡虻膯T工

SQL> select *from emp where to_char(hiredate,'mm')='02';
     select *from emp where to_char(hiredate,'mm')=2;
     EMPNO ENAME                JOB                       MGR HIREDATE              SAL       COMM     DEPTNO
---------- -------------------- ------------------ ---------- -------------- ---------- ---------- ----------
      7499 ALLEN                SALESMAN                 7698 20-2月 -81           1600        300      30
      7521 WARD                 SALESMAN                 7698 22-2月 -81           1250        500      30

格式化數(shù)字

SQL> select to_char(9999999999,'L999,999,999,999,999') from dual;
TO_CHAR(9999999999,'L999,999,999,999,999')
------------------------------------------------------------
              ¥9,999,999,999

二、TO_DATE
將字符串轉(zhuǎn)為日期

SQL> select to_date('2016-05-15','yyyy-mm-dd') from dual;
TO_DATE('2016-
--------------
15-5月 -16

三、TO_NUMBER

//提供默認(rèn)轉(zhuǎn)換    select '1'+'2' from dual;與下面一致
SQL> select to_number('1')+to_number('2') from dual;
TO_NUMBER('1')+TO_NUMBER('2')
-----------------------------
                            3

通用函數(shù)

數(shù)字 NVL(列|NULL,默認(rèn)值)   如果傳入的內(nèi)容是NULL,則使用默認(rèn)數(shù)值處理;如果不是NULL則使用原始數(shù)據(jù)處理;
數(shù)據(jù)類(lèi)型 DECODE(列|字符串|數(shù)值,比較內(nèi)容1,顯示內(nèi)容1,比較內(nèi)容2,顯示內(nèi)容2,...[,默認(rèn)顯示內(nèi)容])  設(shè)置的內(nèi)容會(huì)與每一個(gè)比較內(nèi)容進(jìn)行比較,如果內(nèi)容相同,則會(huì)使用顯示內(nèi)容進(jìn)行輸出,如何都不相同,則使用最后的默認(rèn)信息輸出。

一、 NVL 處理NULL函數(shù)(任何數(shù)與NULL運(yùn)算都為NULL此時(shí)把NULL替換成0,所以要處理NULL值)

SQL> select empno,ename,comm,(sal+nvl(comm,0))*12 from emp;
     EMPNO ENAME                      COMM (SAL+NVL(COMM,0))*12
---------- -------------------- ---------- --------------------
      7369 SMITH                                           9600
      7499 ALLEN                       300                22800
      7521 WARD                        500                21000
      7566 JONES                                          35700
      7654 MARTIN                     1400                31800
      7698 BLAKE                                          34200
      7782 CLARK                                          29400
      7788 SCOTT                                          36000
      7839 KING                                           60000
      7844 TURNER                        0                18000
      7876 ADAMS                                          13200
      7900 JAMES                                          11400
      7902 FORD                                           36000
      7934 MILLER                                         15600

二、DECODE(比較輸出)
將職位信息換成中文(要設(shè)置則全部設(shè)置,不設(shè)置的為NULL,若不設(shè)置也可用‘---’表示)

SQL> select ename,job,decode(job,'CLERK','辦事員','SALESMAN','銷(xiāo)售') from emp;
ENAME                JOB                DECODE(JOB,'CLERK'
-------------------- ------------------ ------------------
SMITH                CLERK              辦事員
ALLEN                SALESMAN           銷(xiāo)售
WARD                 SALESMAN           銷(xiāo)售
JONES                MANAGER
MARTIN               SALESMAN           銷(xiāo)售
BLAKE                MANAGER
CLARK                MANAGER
SCOTT                ANALYST
KING                 PRESIDENT
TURNER               SALESMAN           銷(xiāo)售
ADAMS                CLERK              辦事員
JAMES                CLERK              辦事員
FORD                 ANALYST
MILLER               CLERK              辦事員
-----------------------------------------------------
SQL> select ename,job,decode(job,'CLERK','辦事員','SALESMAN','銷(xiāo)售','---') from emp;

ENAME                JOB                DECODE(JOB,'CLERK'
-------------------- ------------------ ------------------
SMITH                CLERK              辦事員
ALLEN                SALESMAN           銷(xiāo)售
WARD                 SALESMAN           銷(xiāo)售
JONES                MANAGER            ---
MARTIN               SALESMAN           銷(xiāo)售
BLAKE                MANAGER            ---
CLARK                MANAGER            ---
SCOTT                ANALYST            ---
KING                 PRESIDENT          ---
TURNER               SALESMAN           銷(xiāo)售
ADAMS                CLERK              辦事員
JAMES                CLERK              辦事員
FORD                 ANALYST            ---
MILLER               CLERK              辦事員
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 單行函數(shù) SQL函數(shù): 兩種sql函數(shù) 單行函數(shù) 操作數(shù)據(jù)對(duì)象 接受參數(shù)返回一個(gè)結(jié)果 只對(duì)一行進(jìn)行變換 每行返回一...
    我可能是個(gè)假開(kāi)發(fā)閱讀 318評(píng)論 0 6
  • 1.簡(jiǎn)介 數(shù)據(jù)存儲(chǔ)有哪些方式?電子表格,紙質(zhì)文件,數(shù)據(jù)庫(kù)。 那么究竟什么是關(guān)系型數(shù)據(jù)庫(kù)? 目前對(duì)數(shù)據(jù)庫(kù)的分類(lèi)主要是...
    喬震閱讀 2,035評(píng)論 0 2
  • SQL ==SQLPLUS== DML(Data Manipulation Language,數(shù)據(jù)操作語(yǔ)言)---...
    蝌蚪1573閱讀 641評(píng)論 0 4
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法,類(lèi)相關(guān)的語(yǔ)法,內(nèi)部類(lèi)的語(yǔ)法,繼承相關(guān)的語(yǔ)法,異常的語(yǔ)法,線程的語(yǔ)...
    子非魚(yú)_t_閱讀 34,894評(píng)論 18 399
  • 簡(jiǎn)介 開(kāi)發(fā)者應(yīng)該經(jīng)??吹絾卫J竭@個(gè)設(shè)計(jì)模式,那什么是單例模式呢? 我們知道面向?qū)ο缶幊虝?huì)生成很多實(shí)例,比如對(duì)于學(xué)...
    Cloudox_閱讀 169評(píng)論 0 0

友情鏈接更多精彩內(nèi)容