Oracle知识点连载(三)

来源:互联网 发布:怎么找淘宝卖家id 编辑:程序博客网 时间:2024/05/17 01:11

SQL> select lower(‘Hello WOrld’) 转小写,upper(‘Hello WOrld’) 转大写,initcap(‘hello world’) 首字母大写
2 from dual;

转小写 转大写 首字母大写


hello world HELLO WORLD Hello World

SQL> –substr(a,b) 从a中,第b位开始取
SQL> select substr(‘Hello World’,3) 子串 from dual;

子串

llo World

SQL> –substr(a,b,c) 从a中,第b位开始取,取c位
SQL> select substr(‘Hello World’,3,4) 子串 from dual;

子串

llo

SQL> –length 字符数 lengthb字节数
SQL> select length(‘Hello World’) 字符,lengthb(‘Hello World’) 字节 from dual;

  字符       字节                                                                                                                                 

    11         11                                                                                                                                 

SQL> ed
已写入 file afiedt.buf

1* select length(‘北京’) 字符,lengthb(‘北京’) 字节 from dual
SQL> /

  字符       字节                                                                                                                                 

     2          4                                                                                                                                 

SQL> –instr(a,b)
SQL> select instr(‘Hello World’,’ll’) 位置 from dual;

位置

     3                                                                                                                                            

SQL> –lpad 左填充 rpad 右填充
SQL> – abcd —> 10位
SQL> select lpad(‘abcd’,10,’‘) 左,rpad(‘abcd’,10,’‘) 右 from dual;

左 右


*abcd abcd*

SQL> –trim 去掉前后指定的字符
SQL> select trim(‘H’ from ‘Hello WorldH’) from dual;

TRIM(‘H’FR

ello World

SQL> –replace 替换
SQL> select replace(‘Hello WOrld’,’l’,’*’) from dual;

REPLACE(‘HE

He**o WOr*d

SQL> –四舍五入
SQL> select round(45.926,2) 一,round(45.926,1) 二,round(45.926,0) 三,round(45.926,-1) 四,round(45.926,-2) 五
2 from dual;

    一         二         三         四         五                                                                                                

 45.93       45.9         46         50          0                                                                                                

SQL> –截断
SQL> ed
已写入 file afiedt.buf

1 select trunc(45.926,2) 一,trunc(45.926,1) 二,trunc(45.926,0) 三,trunc(45.926,-1) 四,trunc(45.926,-2) 五
2* from dual
SQL> /

    一         二         三         四         五                                                                                                

 45.92       45.9         45         40          0                                                                                                

SQL> host cls

SQL> –日期
SQL> –当前时间
SQL> select sysdate from dual;

SYSDATE

01-7月 -16

SQL> –格式化时间
SQL> select to_char(sysdate,’yyyy-mm-dd hh24:mi:ss’) from dual;

TO_CHAR(SYSDATE,’YY

2016-07-01 12:06:30

SQL> –昨天 今天 明天
SQL> select (sysdate-1) 昨天,sysdate 今天,(sysdate+1) 明天 from dual;

昨天 今天 明天


30-6月 -16 01-7月 -16 02-7月 -16

SQL> –计算员工的工龄:天 星期 月 年
SQL> select ename,hiredate,(sysdate-hiredate) 天,(sysdate-hiredate)/7 星期,(sysdate-hiredate)/30 月,(sysdate-hiredate)/365 年
2 from emp;

ENAME HIREDATE 天 星期 月 年


SMITH 17-12月-80 12980.5068 1854.35812 432.683561 35.5630324
ALLEN 20-2月 -81 12915.5068 1845.0724 430.516894 35.3849502
WARD 22-2月 -81 12913.5068 1844.78669 430.450228 35.3794708
JONES 02-4月 -81 12874.5068 1839.21526 429.150228 35.2726214
MARTIN 28-9月 -81 12695.5068 1813.64383 423.183561 34.7822105
BLAKE 01-5月 -81 12845.5068 1835.0724 428.183561 35.1931694
CLARK 09-6月 -81 12806.5068 1829.50098 426.883561 35.0863201
SCOTT 19-4月 -87 10666.5068 1523.78669 355.550228 29.2233064
KING 17-11月-81 12645.5068 1806.50098 421.516894 34.6452242
TURNER 08-9月 -81 12715.5068 1816.50098 423.850228 34.837005
ADAMS 23-5月 -87 10632.5068 1518.92955 354.416894 29.1301557

ENAME HIREDATE 天 星期 月 年


JAMES 03-12月-81 12629.5068 1804.21526 420.983561 34.6013886
FORD 03-12月-81 12629.5068 1804.21526 420.983561 34.6013886
MILLER 23-1月 -82 12578.5068 1796.92955 419.283561 34.4616625

已选择 14 行。

SQL> select sysdate+hiredate from emp;
select sysdate+hiredate from emp
*
第 1 行出现错误:
ORA-00975: 不允许日期 + 日期

SQL> –months_between 相差的月数
SQL> select ename,hiredate,(sysdate-hiredate)/30 一,months_between(sysdate,hiredate) 二
2 from emp;

ENAME HIREDATE 一 二


SMITH 17-12月-80 432.683622 426.50028
ALLEN 20-2月 -81 430.516956 424.403505
WARD 22-2月 -81 430.450289 424.338989
JONES 02-4月 -81 429.150289 422.984151
MARTIN 28-9月 -81 423.183622 417.145441
BLAKE 01-5月 -81 428.183622 422
CLARK 09-6月 -81 426.883622 420.758344
SCOTT 19-4月 -87 355.550289 350.435764
KING 17-11月-81 421.516956 415.50028
TURNER 08-9月 -81 423.850289 417.790602
ADAMS 23-5月 -87 354.416956 349.306731

ENAME HIREDATE 一 二


JAMES 03-12月-81 420.983622 414.951893
FORD 03-12月-81 420.983622 414.951893
MILLER 23-1月 -82 419.283622 413.306731

已选择 14 行。

SQL> host cls

SQL> –add_months
SQL> –53个月后
SQL> select add_months(sysdate,53) from dual;

ADD_MONTHS(SYS

01-12月-20

SQL> –last_day
SQL> –日期所在月份的最后一天
SQL> select last_day(sysdate) from dual;

LAST_DAY(SYSDA

31-7月 -16

SQL> –next_day
SQL> –下一个星期五
SQL> select next_day(sysdate,’星期五’) from dual;
举例:今天是星期一(5月8日),那么使用这个函数,求得的下个星期二是:5月9日,而不是5月16日(这个需要注意下,和平时想的不一样),下个星期一是:5月15日

NEXT_DAY(SYSDA

08-7月 -16

SQL> select next_day(sysdate,’星期六’) from dual;

NEXT_DAY(SYSDA

02-7月 -16

SQL> /*
SQL> next_day的应用:每个星期一自动备份表中的数据
SQL> 1. 分布式数据库
SQL> 2. 触发器 快照
SQL> */
SQL> select round(sysdate,’month’),round(sysdate,’year’) from dual;

ROUND(SYSDATE, ROUND(SYSDATE,


01-7月 -16 01-1月 -17

SQL> –2016-07-01 12:26:12今天是星期五
SQL> select to_char(sysdate,’yyyy-mm-dd hh24:mi:ss今天是day’) from dual;
select to_char(sysdate,’yyyy-mm-dd hh24:mi:ss今天是day’) from dual
*
第 1 行出现错误:
ORA-01821: 日期格式无法识别

这种情况,需要给 今天是 加个双引号,如下:
SQL> select to_char(sysdate,’yyyy-mm-dd hh24:mi:ss”今天是”day’) from dual;

TO_CHAR(SYSDATE,’YYYY-MM-DDHH24:MI

2016-07-01 12:27:22今天是星期五

SQL> –查询员工薪水:两位小数,千位符,本地货币代码
SQL> select to_char(sal,’L9,999.99’) from emp;

TO_CHAR(SAL,’L9,999

       ¥800.00                                                                                                                                        **¥1,600.00**                                                                                                                                        ¥1,250.00                                                                                                                                        ¥2,975.00                                                                                                                                        ¥1,250.00                                                                                                                                        ¥2,850.00                                                                                                                                        ¥2,450.00                                                                                                                                        ¥3,000.00                                                                                                                                        ¥5,000.00                                                                                                                                        ¥1,500.00                                                                                                                                        ¥1,100.00                                                                                                                                   

TO_CHAR(SAL,’L9,999

       ¥950.00                                                                                                                                        ¥3,000.00                                                                                                                                        ¥1,300.00                                                                                                                                   

已选择 14 行。

SQL> host cls

SQL> –通用函数
SQL> –nvl2(a,b,c) 当a=null的时候,返回c;否则返回b
SQL> select sal*12+nvl2(comm,comm,0) from emp;

SAL*12+NVL2(COMM,COMM,0)

                9600                                                                                                                                             19500                                                                                                                                             15500                                                                                                                                             35700                                                                                                                                             16400                                                                                                                                             34200                                                                                                                                             29400                                                                                                                                             36000                                                                                                                                             60000                                                                                                                                             18000                                                                                                                                             13200                                                                                                                              

SAL*12+NVL2(COMM,COMM,0)

               11400                                                                                                                                             36000                                                                                                                                             15600                                                                                                                              

已选择 14 行。

SQL> –nullif(a,b) 当a=b的时候,返回null;否则返回a
SQL> select nullif(‘abc’,’abc’) 值 from dual;

SQL> select nullif(‘abc’,’abcd’) 值 from dual;

abc

SQL> –coalesce 从左到右 找到第一个不为null的值
SQL> select comm,sal,coalesce(comm,sal) “第一个不为null的值” from emp;

  COMM   SAL 第一个不为null的值                                                                                                                   

         800                800                                                                                                                      300  1600                300                                                                                                                      500  1250                500                                                                                                                           2975               2975                                                                                                                     1400  1250               1400                                                                                                                           2850               2850                                                                                                                           2450               2450                                                                                                                           3000               3000                                                                                                                           5000               5000                                                                                                                        0  1500                  0                                                                                                                           1100               1100                                                                                                                     COMM   SAL 第一个不为null的值                                                                                                                   

         950                950                                                                                                                           3000               3000                                                                                                                           1300               1300                                                                                                                   

已选择 14 行。

SQL> host cls

SQL> –涨工资,总裁1000 经理800 其他400
SQL> select * from 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                                                                    EMPNO ENAME    JOB              MGR HIREDATE         SAL       COMM     DEPTNO                                                                   

  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                                                                   

已选择 14 行。

SQL> select empno,ename,job,sal 涨前,
case job when ‘PRESIDENT’ then sal+1000
when ‘MANAGER’ then sal+800
else sal+400
end 涨后
from emp;

备注:这里是等于的情况,也可能是区间,如果是区间的话,格式如下:
select empno,ename,job,sal 涨前,
case when sal<2000 then sal+1000
when sal between 2000 and 3000 then sal+800
else sal+400
end 涨后
from emp;

 EMPNO ENAME    JOB             涨前       涨后                                                                                                   

  7369 SMITH    CLERK            800       1200                                                                                                     7499 ALLEN    SALESMAN        1600       2000                                                                                                     7521 WARD     SALESMAN        1250       1650                                                                                                     7566 JONES    MANAGER         2975       3775                                                                                                     7654 MARTIN   SALESMAN        1250       1650                                                                                                     7698 BLAKE    MANAGER         2850       3650                                                                                                     7782 CLARK    MANAGER         2450       3250                                                                                                     7788 SCOTT    ANALYST         3000       3400                                                                                                     7839 KING     PRESIDENT       5000       6000                                                                                                     7844 TURNER   SALESMAN        1500       1900                                                                                                     7876 ADAMS    CLERK           1100       1500                                                                                                    EMPNO ENAME    JOB             涨前       涨后                                                                                                   

  7900 JAMES    CLERK            950       1350                                                                                                     7902 FORD     ANALYST         3000       3400                                                                                                     7934 MILLER   CLERK           1300       1700                                                                                                   

已选择 14 行。

SQL> select empno,ename,job,sal 涨前,
2 decode(job,’PRESIDENT’,sal+1000,
3 ‘MANAGER’,sal+800,
4 sal+400) 涨后
5 from emp;

 EMPNO ENAME    JOB             涨前       涨后                                                                                                   

  7369 SMITH    CLERK            800       1200                                                                                                     7499 ALLEN    SALESMAN        1600       2000                                                                                                     7521 WARD     SALESMAN        1250       1650                                                                                                     7566 JONES    MANAGER         2975       3775                                                                                                     7654 MARTIN   SALESMAN        1250       1650                                                                                                     7698 BLAKE    MANAGER         2850       3650                                                                                                     7782 CLARK    MANAGER         2450       3250                                                                                                     7788 SCOTT    ANALYST         3000       3400                                                                                                     7839 KING     PRESIDENT       5000       6000                                                                                                     7844 TURNER   SALESMAN        1500       1900                                                                                                     7876 ADAMS    CLERK           1100       1500                                                                                                    EMPNO ENAME    JOB             涨前       涨后                                                                                                   

  7900 JAMES    CLERK            950       1350                                                                                                     7902 FORD     ANALYST         3000       3400                                                                                                     7934 MILLER   CLERK           1300       1700                                                                                                   

已选择 14 行。

显示税率的

SQL> select empno,ename,sal,
decode(trunc(sal/2000,0),
0,0.00,
1,0.09,
2,0.20,
0.45) 税率
from emp;

SQL> spool off

0 0
原创粉丝点击