精华内容
下载资源
问答
  • decode函数 decode(条件1,值1,结果1,值2,结果2,结果3); notes:条件1和值1相等,输出结果1;条件1和值2相等,输出结果2;否则输出结果3 case when … then … when … then … else … end case when 条件1 then ...
    1. decode函数
      decode(条件1,值1,结果1,值2,结果2,结果3);
      notes:条件1和值1相等,输出结果1;条件1和值2相等,输出结果2;否则输出结果3
    2. case when … then … when … then … else … end
      case when 条件1 then 结果1 when 条件2 then 结果2 else 结果3 end as 别名;
      notes:条件1成立输出结果1;条件2成立输出结果2;否则输出结果3
    展开全文
  • 06-oracle 通用函数

    2019-04-15 15:34:00
    --nvl(数字|列名,默认值) 数字或列的值为...--nullif(表达式一,表达式二) 判断2个表达式是否相等 --decode(数值|列,值1,值1时输出的结果,值2,值2时输出的结果。。。) --case 列名 when 条件 then 动作 el...

    --nvl(数字|列名,默认值) 数字或列的值为null显示为0,不为null时显示原值

    --nvl2(comm,comm,0)如果comm不为null则显示comm,为null则显示0

    --nullif(表达式一,表达式二) 判断2个表达式是否相等

    --decode(数值|列,值1,值1时输出的结果,值2,值2时输出的结果。。。)

    --case 列名 when 条件 then 动作 else end结束

    ---------------
    select comm 原值,nvl(comm,0) 为null显示0不为null显示原值 from emp;

    --求员工年薪(null不能直接运算符一起使用,否则结果为null)
    select ename,job,sal,comm,(sal+nvl(comm,0))*12 年薪 from emp;

    ·

    --nvl2(comm,comm,0)如果comm不为null则显示comm,为null则显示0
    select comm,nvl2(comm,comm,0) from emp;

    select  sal,comm,(sal+nvl(comm,0))*12 年薪,nvl2(comm,sal+comm,sal)*12 年薪  from emp;

    --nullif(表达式一,表达式二)如果表达式一等于表达式二则返回null,如果表达式一不等表达式二则返回表达式一
    select ename,job,length(ename),length(job),nullif(length(ename),length(job)) nullif判断结果
    from emp;

    --decode(数值|列,值1,值1时输出的结果,值2,值2时输出的结果)
    --值为1时输出one,值为2时输入two
    select decode(2,1,'one',2,'two') 此时值为2 ,
    decode(1,1,'one',2,'two') 此时值为1
    from dual;

    --decode job列的工作为CLERK时输出业务员,工作为SALESMAN时输出销售。。。。

    select ename,job,decode(job,
    'CLERK','业务员',
    'SALESMAN','销售',
    'PRESIDENT','LD',
    'MANAGER','经理',
    'ANALYST','ana'
    )  职位类别
    from emp;

    --case when then 当工作为clerk时工资涨20%工作为salesman时涨30%。。。end表示case的结束

    select ename,job,sal,
    case job
    when 'CLERK' then sal*1.2
    when 'SALESMAN' then sal*1.3
    when 'MANAGER' then sal*1.4
    else
    sal*1.1
    end 工资增长后
    from emp;

     

    转载于:https://www.cnblogs.com/joeshang/p/10710969.html

    展开全文
  • oracle decode函数的使用

    2009-04-24 08:08:00
    由于近期的一点点工作,学习了一点点Oracle的东西,仅记录一点:decode函数和sign函数配合在sql语句中做判断。decode() 语法:decode(expression, compare1,value1, compare2, value2, .... ,defaultValue)意思很...

    由于近期的一点点工作,学习了一点点Oracle的东西,仅记录一点:
    decode函数和sign函数配合在sql语句中做判断。

    decode() 语法:
    decode(expression, compare1,value1, compare2, value2, .... ,defaultValue)
    意思很简单,如果expression和compareN相等,则返回valueN,如果一个都不相等,则返回defaultValue.

    一个最最简单的使用就是为了防止除数等于0,比如
    SELECT a/b FROM table;
    如果b=0,则会发生 ORA-01476: 除数为 0 错误,如果这样写:
    SELECT decode(b,0,0,a/b) FROM table;
    如果b=0,则返回0,否则返回a/b。

    很显然,如果单单使用decode(),只能做相当于switch-case的功能,那么比如我想判断小于某数的情况呢?

    sign(a-b), sign根据a-b和0做比较,大于,等于,小于分别返回1,0,-1,举个例子,我想找所有小于10的b,如果大于10的统统返回100,可以这样写:
    SELECT decode(sign(b-10),-1,b,100) FROM table;

    以上2点仅自娱自乐,很久没有更新了。。。

    展开全文
  • decode是pl/sql语法,只能在oracle中使用, case when是标准SQL的语法,哪儿都能用,也就是说移植性更强. ...DECODE只能用做相等判断,但是可以配合sign函数进行大于,小于,等于的判断;CASE可用于=,>=,...
    decode是pl/sql语法,只能在oracle中使用,
    case when是标准SQL的语法,哪儿都能用,也就是说移植性更强.

    decode像是case when的精简版,
    DECODE只能用做相等判断,但是可以配合sign函数进行大于,小于,等于的判断;CASE可用于=,>=,<,<=,<>,is null,is not null 等的判断;
    当要实现的功能比较简单时,用decode方便,简洁.

    decode(条件,值1,返回值1,值2,返回值2,...值n,返回值n,缺省值)
    该函数的含义如下:
    IF 条件=值1 THEN
        RETURN(翻译值1)
    ELSIF 条件=值2 THEN
        RETURN(翻译值2)
        ......
    ELSIF 条件=值n THEN
        RETURN(翻译值n)
    ELSE
        RETURN(缺省值)
    END IF

    1、比较大小
    select decode(sign(变量1-变量2),-1,变量1,变量2) from dual; --取较小值
    sign()函数根据某个值是0、正数还是负数,分别返回0、1、-1
    例如:
    变量1=10,变量2=20
    则sign(变量1-变量2)返回-1,decode解码结果为“变量1”,达到了取较小值的目的。

    2. 比如我要查询某班男生和女生的数量分别是多少?

    通常我们这么写:

    select count(*) from 表 where 性别 = 男;
    select count(*) from 表 where 性别 = 女;
    要想显示到一起还要union一下,太麻烦了

    用decode呢,只需要一句话
    select decode(性别,男,1,0),decode(性别,女,1,0) from 表

    3,order by对字符列进行特定的排序

    大家还可以在Order by中使用Decode。

    例:表table_subject,有subject_name列。要求按照:语、数、外的顺序进行排序。这时,就可以非常轻松的使用Decode完成要求了。

    select * from table_subject order by decode(subject_name, '语文', 1, '数学', 2, , '外语',3)

    4. 延伸用法:
    a. 与sign函数联用比较大小:
    语法:select decode(sign(arg1-arg2),-1, arg1, arg2) from dual; --get arg1与arg2的较小值
    实例:select decode(sign(3-5),1 ,3, 5) from dual
    注:sign()函数根据某个值是0、正数还是负数,分别返回0、1、-1
    b. 表、视图结构转化:
    基本思路:
    使用substrb函数实现对字段的判断,然后用decode函数对数据进行重新计算,并生成新的数据和构成新的表(table or view)。




    COALESCE
    把表达式中的每个表达式与NULL比较,返回第一个非NULL 的表达式的值。结构如下:
    COALSECE (x1,x2,...,xn);

    CASE WHEN

    语法:


    SELECT CASE
    WHEN price IS NULL THEN 'Unpriced'

    WHEN price < 10 THEN 'Bargain'

    WHEN price BETWEEN 10 and 20 THEN 'Average'

    ELSE 'Gift to impress relatives'

    END AS "Range",

    Title

    FROM titles
    where
    CASE
    WHEN price IS NULL THEN 'Unpriced'

    WHEN price < 10 THEN 'Bargain'

    WHEN price BETWEEN 10 and 20 THEN 'Average'

    ELSE 'Gift to impress relatives' END in('Average','Bargain')

    GROUP BY CASE
    WHEN price IS NULL THEN 'Unpriced'

    WHEN price < 10 THEN 'Bargain'

    WHEN price BETWEEN 10 and 20 THEN 'Average'

    ELSE 'Gift to impress relatives' END,

    Title

    ORDER BY CASE
    WHEN price IS NULL THEN 'Unpriced'

    WHEN price < 10 THEN 'Bargain'

    WHEN price BETWEEN 10 and 20 THEN 'Average'

    ELSE 'Gift to impress relatives'

    END,Title

    解释:除了可以在select 中使用CASE 外,where 子句,group by 子句,order by 子句都可以使用




    先建立一个表
    create table salgrade(grade int, sal int);

    insert into salgrade values(1,1000);
    insert into salgrade values(2,2000);
    insert into salgrade values(3,3000);
    commit;
    case在SQL中有两种写法,
    第一种写法,简单写法:
    select grade,sal,
    case grade
    when 1 then 'low'
    when 2 then 'middle'
    else 'high'
    end
    from salgrade;

    第二种写法,查找写法:
    SELECT grade,sal,
    case when sal<=1000 and sal<>0 then 'low'
    when sal<=2000 then 'middle'
    else 'high'
    end
    FROM salgrade;

    decode只能代替第一种写法:
    select grade,sal,decode(grade,1,'low',2,'middle','high') from salgrade;
    展开全文
  • Oracle的几个NULL函数

    2009-12-31 14:12:00
    平时用的比较多的,就是NVL,没怎么在意其他几个。 NVL 就不用说了,就是判断第一个是否为...NULLIF 判断两个参数是否相等相等返回NULL,否则返回第一个参数。COALESCE 这个不限参数数目,找到第一个不为NULL的就
  • ISNULL(参数1,参数2) 若参数1为空,则返回参数2 NULLIF(参数1,参数2) 若参数1和参数2不等,则返回参数1 若参数1和参数2相等,则返回NULL ... 判断参数1是否为数字,是数字就返回1,不是数字、
  • 函数名称isin 使用示例 isin(str1,str2)='1' 说明:str1,str2分别用逗号切割成多个值,如果str1切割的值与str...oracle函数代码 create or replace function isin(a in varchar2, b in varchar2)  return varcha...
  • 4. oracle 条件逻辑结构

    2020-09-11 16:07:52
    Decode是Oracle特有的函数,只能用于相等判断,且不适合对Null值进行判断。 decode(字段,情况1,显示结果1,情况2,显示结果2,……,都不满足的显示结果) 2、Case when语句 常用的case when 语句有两类:一种...
  • oracle sql

    2010-10-24 23:22:00
    3、别名用“”就会区分大小写 4、显示单引号q‘[字符’串‘]’ 5、Where,group by不能用别名, 5、判断函数;NVL, NVL2, NULLIF(如果相等返回空,不相等返回第一个参数), COALESCE(返回第一个...
  • oracle中 null

    2012-05-04 08:57:23
    null 和其他任何值都不相等相等,包括自身,但可以使用is null或者is not null 来进行判断   任何和null的比较操作,如&lt;&gt; = &lt;=等都返回unknown   oracle对null处理有专门的函数,有nvl...
  • oracle的分页优化,真的坑啊

    千次阅读 2018-08-14 17:11:58
    本来接到一个300万数据的表的优化任务,看了别人写的sql,找了半天发现where条件后面使用了to_char函数而且它还使用了sysdate来判断日期是否相等,也就是说有300万条数据,这个sysdate就要执行300万次,所以把sysdate...
  • 1,第一反应是要判断每一行跟上一行的值是否相等,用游标循环,但是因为表数据千万级的,就作罢。 2,假如一定存在方法,应该从开窗函数考虑,虽然直接得不到结果 测试数据如下: create...
  • 精通Oracle 10g PL/SQL编程--详细书签版

    热门讨论 2013-02-06 17:30:46
    7.1.1 简单条件判断 140 7.1.2 二重条件分支 140 7.1.3 多重条件分支 141 7.2 CASE语句 142 7.2.1 在CASE语句中使用单一选择符进行等值比较 142 7.2.2 在CASE语句中使用多种条件比较 143 7.3 循环语句 144 ...
  • 当用空值做判断的时候,可以用nvl函数来处理; 例如: select * from a t1,b t2 where t1.col1=t2.col1 and t1.col2=t2.col2 and nvl(t1.col3,0)=nvl(t2.col3,0) 意思是当col3为空值的时候,赋值成0再去判断是否相同...
  • decode与case when的区别

    2015-07-24 09:34:37
    1.DECODE oracle 特有;...3.DECODE 只能用做相等判断,但是可以配合sign函数进行大于,小于,等于的判断,CASE 可用于=,>=,,is null,is not null 等的判断; 4.DECODE 使用其来比较简洁,CASE 虽然复杂但更为灵活
  • 1.DECODE 只有Oracle 才有,其它数据库不支持;...3.DECODE 只能用做相等判断,但是可以配合sign函数进行大于,小于,等于的判断,CASE when可用于=,>=,<,<=,<>,is null,is not null 等的判断; 4.DECODE...
  • 1.DECODE 只有Oracle 才有,其它数据库不支持;... 3.DECODE 只能用做相等判断,但是可以配合sign函数进行大于,小于,等于的判断,CASE when可用于=,>=,<,<=,<>,is null,is not null 等的判断; ...
  • 最近在做北京项目时,从数据库中取得了一个字段(是一个逻辑删除的标记为),判断是否为1,结果怎么比较都不相等最后,一看数据库,发现这个字段是char(2),数据库是oracle数据库。 原因就在这里,char(n)会自动自动...
  • 中括号部分可选的,判断该数据不存在就创建 4、 切换、使用指定数据库 use dbName; 5、 显示当前使用数据库所有的表对象 show tables; 6、 显示表结构describe(desc) desc tableName; 7、 创建一张表 create ...
  • $a == $b :相等 $a != $b :不等 $a $b :小于 $a $b :小于等于 $a > $b :大于 $a >= $b :大于等于 与C一样PHP也有三重运算符(?:)。位操作符在PHP同样存在。 优先权 就和C以及Java一样! 2.7 控制流程结构 ...
  • C#编程经验技巧宝典

    热门讨论 2008-06-01 08:59:33
    83 <br>0125 按要求生成指定位数编号 83 <br>0126 确定两字符串是否相等 84 <br>0127 判断两字符串中指定子串是否相等 84 <br>0128 判断字符串是否为日期格式 85 <br>0129 清除字符串中指定...
  • asp.net知识库

    2015-06-18 08:45:45
    如何判断ArrayList,Hashtable,SortedList 这类对象是否相等 帮助解决网页和JS文件中的中文编码问题的小工具 慎用const关键字 装箱,拆箱以及反射 动态调用对象的属性和方法——性能和灵活性兼备的方法 消除由try/...
  • JAVA面试题最全集

    2010-03-13 13:09:10
    判断一个文件或目录是否存在 如何读写文件 7.Java多态的实现(继承、重载、覆盖) 8.编码转换,怎样实现将GB2312编码的字符串转换为ISO-8859-1编码的字符串。 9.Java中访问数据库的步骤,Statement和...
  • 经典SQL语句大全

    热门讨论 2014-12-20 12:00:30
    3),例如:在一个外部表中导入数据,由于某些原因第一次只导入了一部分,但很难判断具体位置,这样只有在下一次全部导入,这样也就产生好多重复的字段,怎样删除重复字段 alter table tablename --添加一个自增列 add...
  • 3),例如:在一个外部表中导入数据,由于某些原因第一次只导入了一部分,但很难判断具体位置,这样只有在下一次全部导入,这样也就产生好多重复的字段,怎样删除重复字段 alter table tablename --添加一个自增列 ...
  • sql经典语句一部分

    2011-07-31 11:16:50
    3),例如:在一个外部表中导入数据,由于某些原因第一次只导入了一部分,但很难判断具体位置,这样只有在下一次全部导入,这样也就产生好多重复的字段,怎样删除重复字段 alter table tablename --添加一个自增列 add...

空空如也

空空如也

1 2
收藏数 27
精华内容 10
关键字:

oracle判断相等函数