数据库-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;

原文地址:https://www.cnblogs.com/sunxiuwen/p/12309607.html

时间: 2024-10-21 06:34:08

数据库-Oracle条件判断语句的相关文章

sas条件判断语句

if语句<可执行语句> data b; set sashelp.class; if _n_ le 4; *如果if为真,则继续执行if后面的语句,最后输出满足if的条件的观测,如果if为假则立刻返回到data步开头继续执行下一条set语句; y = 'now'; /* y = 'now'; if _n_ le 4;也能得出同样的结果,但是效率相对来说较低,因为要重复执行y的赋值语句 */ run; if的另外两种格式if x=3 then y=4; 对于要表达的只有一条数据就用thenif x

条件判断语句比较

条件判断语句比较 流程控制进行条件语句判断的时候,经常用到各种数据类型的变量与零值比较的问题,这里进行一个总结加深对数据类型的认识,不规范的与零比较语句容易让人对参与比较的数据类型产生误解. §1. 布尔变量与零值比较 C++有bool类型,C99标准才有布尔类型_Bool,用整型代替布尔类型,非0表示真,0表示假,如果你的编译器不支持布尔类型,可以自定义类型enum_BOOL{FALSE = 0,TRUE = !FALSE}. 不可将布尔变量直接与TRUE.FALSE或者1.0进行比较,假设布

条件判断语句 if语句/switch语句

if(条件表达式)语句 if语句即条件判断语句,对于if语句括号里的表达式,ECMAScript会自动调用Boolean()转型函数将这个表达式的结果转换成一个布尔值.如果值为true,执行后面的一条语句,否则不执行 <script type="text/javascript"> var box = 100; if (box > 50) //if 语句里的表达式如果返回的false,只会不执行后面的一条语句 alert(box); //第二条语句,和if语句无关,所以

if条件判断语句的不同

let number = ["a":1, "b":2, "c":3]; if let num = number["d"] { print(num) } 看似条件语句是个赋值语句,而我们若如下这样定义: if let n = 1 { } 不行,语法报错的,if条件判断语句只有true与false,初看两个例子差不多,主要是刚接触,对可选类型不太熟,第一个例子中num值是可选类型 int?,它的展开形式如下: let number

21_Shell语言——条件判断一之执行状态返回值、单分支条件判断语句

一.选择执行语句概述 面向过程的程序其流程控制结构主要有三种:1. 顺序执行:2. 循环执行:3. 选择执行.前文中介绍了循环执行,本章及后续章节将重点介绍选择执行这种结构. 选择执行是指当程序执行过程中如果满足指定条件,就执行其中一部分内容,否则就执行其他内容,即只是有选择性的执行测试条件的相关内容. 现在设想,如果要添加用户user1,可以使用useradd user1来实现.但如果user1用户已经存在了,那么执行useradd user1时就会报错.为了避免这种情况,就需要在执行前先测试

求 1+2+...+n, 要求不能使用乘除法、for、while、if、else、switch、case 等关键字以及条件判断语句 (A?B:C)。

求 1+2+...+n,要求不能使用乘除法.for.while.if.else.switch.case 等关键字以及条件判断语句 (A?B:C). #include <bits/stdc++.h> using namespace std; int Sum(int n) { int Ret = 0; n == 0 || (Ret = Sum(n-1)); return n + Ret; } class A{ public: A() { sum += ++n; } static int sum;

Js的三种条件判断语句

Js的三种条件判断语句 If if语句 只有当指定条件为 true 时,使用该语句来执行代码. 语法 if (条件) { 只有当条件为 true 时执行的代码 } if...else 语句 在条件为 true 时执行代码,在条件为 false 时执行其他代码. 语法 if (条件) { 当条件为 true 时执行的代码 } else { 当条件不为 true 时执行的代码 } If...else if...else 语句 使用 if....else if...else 语句来选择多个代码块之一来

题目:求1+2+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字以及条件判断语句(A?B:C)

题目:求1+2+…+n,要求不能使用乘除法.for.while.if.else.switch.case等关键字以及条件判断语句(A?B:C). 分析:这道题没有多少实际意义,因为在软件开发中不会有这么变态的限制.但这道题却能有效地考查发散思维能力,而发散思维能力能反映出对编程相关技术理解的深刻程度. 通常求1+2+…+n除了用公式n(n+1)/2之外,无外乎循环和递归两种思路.由于已经明确限制for和while的使用,循环已经不能再用了.同样,递归函数也需要用if语句或者条件判断语句来判断是继续

求1+2+3+...+n的值,要求不能使用乘除法,for、while、if、else、switch、case、等关键字及条件判断语句(JAVA)

采用递归和三目表达式注意红色字体一定不能写成n-- 1 package com.hunag; 2 3 public class Sum { 4 5 static int sum; 6 public static int isum(int n) 7 { 8 sum+=n; 9 sum=n==0?sum:isum(--n); 10 System.out.println(n); 11 return sum; 12 } 13 public static void main(String[] args)