tnblog
首页
精品
资源
登录

几种函数的用法

277人阅读 2021/8/30 17:22 总访问:88949 评论:0 收藏:0 手机
分类: 笔记

前言:各位老铁们好,今天给大家分享几种函数的用法。欢迎大家一起讨论 如有说错的地方还请各位大佬指教。

正文:
decode函数的用法
1:使用decode判断字符串是否一样

DECODE(value,if1,then1,if2,then2,if3,then3,...,else)

含义为

IF 条件=值1 THEN

    RETURN(value 1)

ELSIF 条件=值2 THEN

    RETURN(value 2)

    ......

ELSIF 条件=值n THEN

    RETURN(value 3)

ELSE

    RETURN(default)

END IF


sql测试

select empno,decode(empno,7369,'smith',7499,'allen',7521,'ward',7566,'jones','unknow') as name from emp where rownum<=10

输出结果

7369 smith

7499 allen

7521 ward

7566 jones

7654 unknow

7698 unknow

7782 unknow

7788 unknow

7839 unknow

7844 unknow


2:使用decode比较大小

select decode(sign(var1-var2),-1,var 1,var2) from dual

sign()函数根据某个值是0、正数还是负数,分别返回0、1、-1

sql测试

select decode(sign(100-90),-1,100,90) from dual

输出结果

90

100-90=10>0 则会返回1,所以decode函数最终取值为90

反正

select decode(sign(100-90),1,100,90) from dual

输出结果

100

100-90=10>0返回1,判断结果为1,返回第一个变量100,最终输出结果为100

3:使用decode函数分段

工资大于5000为高薪,工资介于3000到5000为中等,工资小于3000为低薪

sql测试

SELECT 

    ename,sal,

    DECODE(SIGN(sal - 5000),

            1,

            'high sal',

            0,

            'high sal',

            - 1,

            DECODE(SIGN(sal - 3000),

                    1,

                    'mid sal',

                    0,

                    'mid sal',

                    - 1,

                    DECODE(SIGN(sal - 1000),

                            1,

                            'low sal',

                            0,

                            'low sal',

                            - 1,

                            'low sal')))

FROM

    emp

输出结果

SMITH   800   low sal

ALLEN 1600 low sal

WARD 1250 low sal

JONES 2975 low sal

MARTIN 1250 low sal

BLAKE   2850 low sal

CLARK 2450 low sal

SCOTT 3000 mid sal

KING  5000 high sal

TURNER 1500 low sal

ADAMS 1100 low sal

JAMES 950         low sal

FORD 3000 mid sal

MILLER 1300 low sal


4:利用decode实现表或者试图的行列转换

sql测试

SELECT 

       SUM(DECODE(ENAME,'SMITH',SAL,0))  SMITH,

       SUM(DECODE(ENAME,'ALLEN',SAL,0))  ALLEN,

       SUM(DECODE(ENAME,'WARD',SAL,0))   WARD,

       SUM(DECODE(ENAME,'JONES',SAL,0))  JONES,

       SUM(DECODE(ENAME,'MARTIN',SAL,0)) MARTIN FROM EMP

输出结果如下

SMITH  ALLEN  WARD   JONES  MARTIN

  800  1600   1250       2975       1250



5:使用decode函数来使用表达式来搜索字符串

decode (expression, search_1, result_1, search_2, result_2, ...., search_n, result_n, default)

decode函数比较表达式和搜索字,如果匹配,返回结果;如果不匹配,返回default值;如果未定义default值,则返回空值。

sql测试

SELECT 

    ENAME,

    SAL,

    DECODE(INSTR(ENAME, 'S'),

            0,

            '不含有s',

            '含有s') AS INFO

FROM

    EMP

输出结果

SMITH 800           含有s

ALLEN 1600   不含有s

WARD 1250   不含有s

JONES 2975    含有s

MARTIN 1250    不含有s

BLAKE 2850    不含有s

CLARK 2450    不含有s

SCOTT 3000   含有s

KING 5000   不含有s

TURNER 1500   不含有s

ADAMS 1100   含有s

JAMES 950            含有s

FORD 3000   不含有s

MILLER 1300   不含有s



to_number()函数的用法
to_number()函数是oracle中常用的类型转换函数之一,是将一些处理过的按一定格式编排过的字符串变回数值型的格式。
1、to_number()函数可以将char或varchar2类型的string转换为一个number类型的数值;
2、需要注意的是,被转换的字符串必须符合数值类型格式,如果被转换的字符串不符合数值型格式,Oracle将抛出错误提示;
3、to_number和to_char恰好是两个相反的函数; 

For example:
(1)to_number(varchar2 or char,'格式')
select to_number('000012134') from dual;  
select to_number('88877') from dual;  

(2)如果数字在格式范围内的话,就是正确的,否则就是错误的;如:
select to_number('$12345.678', '$999999.99') from dual;  
select to_number('$12345.678', '$999999.999') from dual;  

(3)可以用来实现进制转换;16进制转换为10进制:
select to_number('19f','xxx') from dual;  
select to_number('f','xx') from dual;  

这里顺便提一下to_char()函数的用法
(1)用作日期转换:
to_char(date,'格式')

select to_date('2005-0-01-01','yyyy-MM-dd') form dual;
select to_char(sysdate,'yyyy-MM-dd HH24:mi:ss') form dual;

(2)处理数字:

to_char(number,'格式');

select to_char(88877) form dual;
select to_char(1234567890,'09999999999999') from dual;
select to_char(12345678,'999,999,999,999') from dual;
select to_char(123456,'99.999') from dual;

(3)to_char(salary,'$99,99');
select to_char(123,'$99.999.9') from dual;

(4)用于进制转换:将10进制转换为16进制;
select to_char(4567,'xxxx') from dual;
select to_char(123,'xxx') from dual;

eg:
输出结果:
输入                                                         输出
to_char(new(),'Day,HH12:MI:SS')           'Tuesday, 05:40:19'
to_char(-0.1,'99.99')                               '-.10'
to_char(-0.1,'FM9.99')                            '-.1'
to_char(0.1,'0.9')                                     '0.1'



评价
每一段旅程,都是一种领悟
排名
6
文章
6
粉丝
16
评论
8
{{item.articleTitle}}
{{item.blogName}} : {{item.content}}
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2021TNBLOG.NET
技术交流:群号677373950
欢迎加群交流技术