数据库-Oracle条件判断语句
经常有这种需求,如当数据库里的状态为20100时,中文希望显示为办理成功,这个时候就需要条件判断了
Oracle中条件判断有三种,如下将分别介绍
一、case ... when ... then ... else ... end【相当于大于小于等于不等于判断】
- 语法介绍
SELECT CASE WHEN T.A = 1 THEN '成功' WHEN T.A = 2 THEN '失败' ELSE '其他' END test_clo FROM TABLE T -- 注: A为表T中的列名,后面的意思是当A的值为1时翻译为'成功',当2时,翻译为'失败',不是这两种就翻译为'其他' test_clo 为上面A的值翻译的值的列名
- 示例
# 需求:按对应状态分组获取对应的总数,且状态显示对应的中文 SELECT T.ORDER_STATUS 订单状态编码, COUNT(1) 分类总数, CASE WHEN T.ORDER_STATUS = '20100' THEN '办理中' WHEN T.ORDER_STATUS = '20101' THEN '办理成功' WHEN T.ORDER_STATUS = '20102' THEN '办理失败' ELSE '其他' END 订单状态 FROM BASE_ORDER T WHERE T.ORDER_CREATETIME >= TO_TIMESTAMP('2020-02-14 14:30:00', 'yyyy-mm-dd hh24:mi:ss') GROUP BY ORDER_STATUS
二、decode(columnname,值1,翻译值1,值2,翻译值2,...值n,翻译值n,缺省值)函数【只能相当于等于判断】
- decode() 函数的语法:
Select decode(columnname,值1,翻译值1,值2,翻译值2,...值n,翻译值n,缺省值) From talbename Where … -- 注: 其中:columnname为要选择的table中所定义的column; 缺省值可以是你要选择的column name本身,也可以是你想定义的其他值,比如Other等; 主要作用:相当于IF语句, 将查询结果翻译成其他值。(即以其他形式表现出来)。
- 举例说明:
现定义一table名为output,其中定义两个column分别为monthid(var型)和sale(number型),若sale值=1000时翻译为D,=2000时翻译为C,=3000时翻译为B,=4000时翻译为A,如是其他值则翻译为Other
SELECT MONTHID, DECODE(SALE, 1000, 'D', 2000, 'C', 3000, 'B', 4000, 'A', ’OTHER’) TEST_SALE FROM OUTPUT
若只与一个值进行比较:
SELECT MONTHID, DECODE(SALE, NULL, '---' ,SALE) TEST_SALE FROM OUTPUT
decode中可使用其他函数,如nvl()函数或sign()函数等:
NVL(EXPR1,EXPR2)
若EXPR1是NULL,则返回EXPR2,否则返回EXPR1。
SELECT NAME,NVL(TO_CHAR(COMM),'NOT APPLICATION') FROM TABLE1
sign()函数根据某个值是0、正数还是负数,分别返回0、1、-1,
用如下的SQL语句取较小值:
SELECT MONTHID, DECODE(SIGN(SALE - 6000), -1, SALE, 6000) FROM OUTPUT;
- 示例2
SELECT DECODE(T.ORDER_STATUS, '20100', '办理中', '20101', '办理成功', '20102', '办理失败', ORDER_STATUS) 订单状态, COUNT(T.ORDER_STATUS) FROM BASE_ORDER T GROUP BY ORDER_STATUS
三、if … then … end if 【大于小于等于不等于判断,在存储过程中使用】
- 语法
if con = '1' then '满意' end if;
if con = '1' then '满意' else '其他' end if;
if con = '1' then '满意' elsif con = '2' then '一般' else '不满意' end if;
相关推荐
Omega 2020-08-16
娜娜 2020-07-28
Justdoit00 2020-07-04
goodriver 2020-06-17
sunboy 2020-06-14
LuoXinLoves 2020-06-10
Justdoit00 2020-06-08
Justdoit00 2020-06-08
娜娜 2020-06-08
Justdoit00 2020-06-01
oraclemch 2020-05-30
bianxq 2020-05-16
sunboy 2020-02-20
ktyl000 2020-02-20
一昕之代码 2020-02-20
LuoXinLoves 2020-05-04
点滴技术生活 2020-04-27
oraclemch 2020-04-22
Carlos 2020-04-18