orcal 中sql字符函数,数字函数,日期函数,转换函数学习,CASE和DECODE表达式学习

字符函数:

大小写字符控制函数:LOWER,UPPER,INITCAP

LOWER:将字符转换成小写

UPPER:将字符转换成大写

INITCAP:将单词首字母转换成大写,其他转换成小写字母

例如: select lower('ASDFAASDF'),upper('asfdasasdf'),initcap('aSDF dasdf Asdf') 

      from dual;
结果:

LOWER('ASDFAASDF') UPPER('ASFDASASDF') INITCAP('ASDFDASDFASDF')
------------------ ------------------- ------------------------
asdfaasdf          ASFDASASDF          Asdf Dasdf Asdf


字符控制函数:CONCAT,SUBSTR,LENGTH,LPAD,RPAD,INSTR,TRIM,REPLACE

CONCAT:连接字符串函数

SUBSTR:截取字符串得到子字符串,[substr(参数1,参数2,参数3) ,参数2表示截取字符串开始的位置,参数3表示截取字符串的长度]

LENGTH;统计字符串中字符的个数

LPAD:左填充  LPAD(参数1,参数2,参数3)  参数1:字段标示符,参数2:待输出参数1的长度,参数3:如果查询结果输出的字符长度不够指定参数2长度,则用参数3指定的字符左填充

RPAD:右填充

INSTR:查找某个字符在字符串中的位置,查找的结果为字符在字符串中首次出现的位置

TRIM:移除字符串中首尾出现的某个字符

REPLACE:用某个字符替换字符串中某个出现的所有的字符

例如:1:select concat('hello','world'),substr('helloworld',2,4) ,length('HelloWorld')

 from dual;
 结果:

CONCAT('HELLO','WORLD') SUBSTR('HELLOWORLD',2,4) LENGTH('HELLOWORLD')
----------------------- ------------------------ --------------------
helloworld              ello                                       10

      2:select ename,lpad(salary,10,'*'),rpad(salary,10,'*') 
     from emp;

结果:

ENAME      LPAD(SALARY,10,'*')     RPAD(SALARY,10,'*')
---------- -------------------- --------------------
SMITH      *******800           800*******
ALLEN      ******1600           1600******
WARD       ******1250           1250******

3:select instr('HELLOWORLD','L') from dual

结果:

INSTR('HELLOWORLD','L')
-----------------------
                      3

4;select trim('h' from 'hellohworldhh') from dual

结果:

TRIM('H'FROM'HELLOHWORLDHH')
----------------------------
ellohworld

5:select replace('hellohworldhh','l','M') from dual

结果:

REPLACE('HELLOHWORLDHH','L','M)
------------------------------
heMMohworMdhh


数字函数:ROUND,TRUNC,MOD

ROUND:四十五入      round(435,3523,1)   ------>       结果:435.4

TRUNC:截取    trunc(435.3523,1) -------> 结果:435.3

MOD:取余     mod(435.3523,5) ---------->结果; 0.3523


日期函数:MONTHS_BETWEEN,ADD_MONTHS,NEXT_DAY,LAST_DAY

MONTHS_BETWEEN:计算两个日期之间的月份

ADD_MONTHS:在某个日期上增加月份

NEXT_DAY:指定日期的下一个星期对应的日期

LAST_DAY:本月的最后一天

例如:1:select trunc(months_between(sysdate,hiredate)) months from emp;

结果:  

  MONTHS
----------
       411
       409
       409

2:select sysdate,add_months(sysdate,2),add_months(sysdate,-2) from dual;
结果:

SYSDATE     ADD_MONTHS(SYSDATE,2) ADD_MONTHS(SYSDATE,-2)
----------- --------------------- ----------------------
2015/4/3 9: 2015/6/3 9:21:03      2015/2/3 9:21:03

 3:select sysdate,next_day(sysdate,'星期一') from dual;

结果;
SYSDATE     NEXT_DAY(SYSDATE,'星期一')
----------- --------------------------
2015/4/3 9: 2015/4/6 9:23:19

4:select sysdate,last_day(sysdate) from dual

结果:

SYSDATE     LAST_DAY(SYSDATE)
----------- -----------------
2015/4/3 9: 2015/4/30 9:30:38


显示转换函数:TO_CHAR,TO_NUMBER,TO_DATE



例如:

1:(1)select ename,hiredate from emp
where to_char(hiredate,'YYYY-MM-DD') = '1981-09-08'

结果:

ENAME      HIREDATE
---------- -----------
TURNER     1981/9/8

 (2)select to_char(hiredate,'YYYY"年"MM"月"DD"日"') from emp
where to_char(hiredate,'YYYY"年"MM"月"DD"日"') = '1981年09月08日'

结果:

TO_CHAR(HIREDATE,'YYYY"年"MM"?
------------------------------
1981年09月08日

 (3)select to_char(12312345.45,'L999,999,999.99') as to_char from dual

结果;

TO_CHAR
-------------------------
          ¥12,312,345.45

2:select to_number('¥12,312,345.45','L999,999,999.99') +100 from dual

结果;

 TO_NUMBER('¥12,312,345.45','L
------------------------------
                   12312445.45


3:select to_date('1994-9-8','YYYY-MM-DD') from dual  

结果;TO_DATE('1994-9-8','YYYY-MM-DD
------------------------------
1994/9/8

 通用函数:NVL,NULLIF

NVL(参数1,参数2):如果参数1为null,则用参数2代替参数1

例如:

--求员工年薪   comm  定义可以为null
select ename,sal*12*(1+comm) from emp

结果:

ENAME      SAL*12*(1+COMM)
---------- ---------------
SMITH      
ALLEN              5779200
WARD               7515000
JONES      
MARTIN            21015000

--- select ename,sal*12*(1+nvl(comm,0)) from emp

结果;

ENAME      SAL*12*(1+NVL(COMM,0))
---------- ----------------------
SMITH                        9600
ALLEN                     5779200
WARD                      7515000
JONES                       35700
MARTIN                   21015000


--查询员工绩效奖金,如果有则输出,没有则输出没有绩效奖金

select ename,nvl(to_char(comm,'999999.99'),'没有绩效奖金')from emp

结果;

ENAME     NVL(TO_CHAR(COMM,'999999.99'),

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

SMITH      没有绩效奖金

ALLEN          300.00

WARD           500.00

JONES      没有绩效奖金

MARTIN        1400.00

BLAKE      没有绩效奖金

CLARK      没有绩效奖金

 

CASE表达式和DECODE表达式,这两个表达式用途相同,只是使用形式不一样

--不同部门工资奖励情况不同,10部门1.1倍,20部门1.2倍,30部门1.3倍

select ename,deptno,sal,

case deptno when10 then sal*1.1

            when 20then sal*1.2

            when 30then sal*1.3

            else sal end asnew_sal

from emp

 

select ename,deptno,sal,

decode( deptno ,10, sal*1.1,

                20 , sal*1.2,

                30 , sal*1.3,

             sal) as new_sal

from emp

 

上面两个语句所得到的结果相同:

ENAME      DEPTNO       SAL   NEW_SAL

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

SMITH          20    800.00        960

ALLEN          30   1600.00      2080

WARD           30   1250.00      1625

JONES          20   2975.00      3570

MARTIN         30   1250.00      16ed5

BLAKE          30   2850.00      3705

CLARK          10   2450.00      2695







  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值