ORACLE学习笔记三

ORACLE学习笔记三

dual--虚拟表

单行函数:
单行函数一共有五类,分别是:字符函数,数字函数,日期函数,转换函数,通用函数。

SQL> select * from scott.emp;

     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

      7521 WARD       SALESMAN        7698 22-2月 -81           1250        500         30

      7566 JONES      MANAGER         7839 02-4月 -81           2975                    20

      7654 MARTIN     SALESMAN        7698 28-9月 -81           1250       1400         30

      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

      7839 KING       PRESIDENT            17-11月-81           5000                    10

      7844 TURNER     SALESMAN        7698 08-9月 -81           1500          0         30

      7876 ADAMS      CLERK           7788 23-5月 -87           1100                    20

      7900 JAMES      CLERK           7698 03-12月-81            950                    30

      7902 FORD       ANALYST         7566 03-12月-81           3000                    20

      7934 MILLER     CLERK           7782 23-1月 -82           1300                    10


1.字符函数:

UPPER():转大写
LOWER():转小写
INITCAP():首字母大写
LENGTH():求长度
REPLACE():替换
SUBSTR():截取字符串
例如:select upper(ename) from scott.emp; 
结果:
UPPER(ENAM
----------
SMITH
ALLEN
WARD
JONES
MARTIN
BLAKE
CLARK
SCOTT
KING
TURNER
ADAMS
JAMES
FORD
MILLER

例如:select replace(ename,'A','我') from emp;
结果:
REPLACE(ENAME,'A','
--------------------
SMITH
我LLEN
W我RD
JONES
M我RTIN
BL我KE
CL我RK
SCOTT
KING
TURNER
我D我MS
J我MES
FORD
MILLER

例如:select ename,substr(ename,2),substr(ename,2,3),substr(ename,-2) from emp;【注意substr(ename,-2)】的用法,-2表示为截取从后面

开始的两个字符。
结果:
ENAME      SUBSTR(ENAME,2)    SUBSTR SUBS
---------- ------------------ ------ ----
SMITH      MITH               MIT    TH
ALLEN      LLEN               LLE    EN
WARD       ARD                ARD    RD
JONES      ONES               ONE    ES
MARTIN     ARTIN              ART    IN
BLAKE      LAKE               LAK    KE
CLARK      LARK               LAR    RK
SCOTT      COTT               COT    TT
KING       ING                ING    NG
TURNER     URNER              URN    ER
ADAMS      DAMS               DAM    MS
JAMES      AMES               AME    ES
FORD       ORD                ORD    RD
MILLER     ILLER              ILL    ER

2.数字函数
ROUND():四舍五入
TRUNC():不四舍五入
MOD():取模运算
例如:select round(514.7524),round(514.7524,2),round(514.7524,-2),round(514.7524,-1) from dual;
结果:注意ROUND(514.7524,-2)和ROUND(514.7524,-1)的结果。
ROUND(514.7524) ROUND(514.7524,2) ROUND(514.7524,-2) ROUND(514.7524,-1)
--------------- ----------------- ------------------ ------------------
            515            514.75                500                510
例如:select trunc(514.7524),trunc(514.7524,2),trunc(514.7524,-2),trunc(514.7524,-1) from dual;
结果:
TRUNC(514.7524) TRUNC(514.7524,2) TRUNC(514.7524,-2) TRUNC(514.7524,-1)
--------------- ----------------- ------------------ ------------------
            514            514.75                500                510
例如:
SQL> select mod(14,2) from dual;

 MOD(14,2)
----------
         0
例如:
SQL> select mod(14,3) from dual;

 MOD(14,3)
----------
         2

3.日期函数
a.sysdate; 当前日期的获取
例如:
SQL> select sysdate,sysdate+1,sysdate-100 from dual;

SYSDATE        SYSDATE+1      SYSDATE-100
-------------- -------------- --------------
11-10月-11     12-10月-11     03-7月 -11
b.last_day(日期) 获取日期的月份最后一天
例如:
select last_day(sysdate) from dual;
结果:
LAST_DAY(SYSDA SYSDATE
-------------- --------------
31-10月-11     11-10月-11
c.next_day(日期,星期X) 获取指定日期之后的下个星期X的日期
例如:select next_day(sysdate,'星期六') from dual;
结果:
NEXT_DAY(SYSDA
--------------
15-10月-11
d.add_months(日期,数字)获取若干月之后的日期
例如:select add_months(sysdate,3) from dual;
ADD_MONTHS(SYS
--------------
11-1月 -12
e.months_between(日期1,日期2)
例如:select months_between(sysdate,hiredate) from emp;
结果:
MONTHS_BETWEEN(SYSDATE,HIREDATE)
--------------------------------
                      369.817491
                      367.720716
                        367.6562
                      366.301362
                      360.462652
                       365.33362
                      364.075555
                      293.752975
                      358.817491
                      361.107813
                      292.623942
                      358.269104
                      358.269104
                      356.623942
4.转换函数
a.to_char(字符串|列,'格式字符串')
例如:select to_char(sysdate,'yyyy-mm-dd'), to_char(sysdate,'fmyyyy-mm-dd'), to_char(sysdate,'yyyy-mm-dd hh:mi:ss'), to_char

(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;
结果:
TO_CHAR(SY TO_CHAR(SY TO_CHAR(SYSDATE,'YY TO_CHAR(SYSDATE,'YY
---------- ---------- ------------------- -------------------
2011-05-11 2011-5-11  2011-05-11 10:19:34 2011-05-11 22:19:34
例如:select to_char(789673512312312,'999,999,999,999,999'),to_char(789673512312312,'L999,999,999,999,999') from dual;
结果:
TO_CHAR(789673512312 TO_CHAR(789673512312312,'L999,
-------------------- ------------------------------
 789,673,512,312,312          ¥789,673,512,312,312
b.to_date(字符串,格式) 字符串类型转换为日期类型
例如:select to_date('19410103','yyyy-mm-dd')   from dual;
结果:
TO_DATE('19410
--------------
03-1月 -41    
c.to_number(字符串) 字符串类型转换为number类型
例如:select to_number('1') + to_number('2') , '1'+'2' from dual;
结果:
TO_NUMBER('1')+TO_NUMBER('2')    '1'+'2'
----------------------------- ----------
                            3          3

5.通用函数
a.nvl() 处理null
例如:select  sal,comm,nvl(comm,0),(sal + nvl(comm,0))*12,nvl(comm,20)  from emp;
结果:
 SAL       COMM NVL(COMM,0) (SAL+NVL(COMM,0))*12 NVL(COMM,20)
---- ---------- ----------- -------------------- ------------
 800                      0                 9600           20
1600        300         300                22800          300
1250        500         500                21000          500
2975                      0                35700           20
1250       1400        1400                31800         1400
2850                      0                34200           20
2450                      0                29400           20
3000                      0                36000           20
5000                      0                60000           20
1500          0           0                18000            0
1100                      0                13200           20
 950                      0                11400           20
3000                      0                36000           20
1300                      0                15600           20
b.decode(列,判断值1,显示值1,判断值2,显示值2,。。。) 必须把此列中的所有情况全部写在后面,若不写则替换为空
例如:select dname,decode(dname,'ACCOUNTING','财务部','RESEARCH','研发部','SALES','销售部','OPERATIONS','管理部')as 全部替

换,decode(dname,'ACCOUNTING','财务部','SALES','销售部','OPERATIONS','管理部') as 部分替换 from dept;
结果:
DNAME          全部替 部分替
-------------- ------ ------
ACCOUNTING     财务部 财务部
RESEARCH       研发部
SALES          销售部 销售部
OPERATIONS     管理部 管理部





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值