oracle case when与decode语句

本文介绍了Oracle数据库中casewhen语句及decode函数的应用场景。通过具体示例展示了如何利用这两种方法进行条件判断,特别是在盘点盈亏和员工信息查询等场景中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天遇到sql语句中要判断不知道怎么做,于是找了一下,哈哈oracle挺强的
先看case when 语句:
select case when c.store_amount-c.amount > 0 then '盘盈'
when c.store_amount-c.amount < 0 then '盘亏'
else '持平' end from sghis.pa_pham_check_detail c'
decode语句:
select t.employee_id,
t.employee_name,
decode(t.sex , '1' , '男', '2' , '女', ' ') as sex,
t.age,
a.office_name,
t.office_code,
b.dmmc || ' ' as work_p,
t.work_position,
t.doctor_code || ' ' as doctor_code,
e.dmmc,
t.technic_title,
t.py_code,
t.wb_code
from sghis.hd_employee t,
sghis.hd_office_dict a,
(select c.dmsb, c.dmmc
from sghis.hd_gy_dmzd c
where c.dmlb = '7'
and c.xtsb = '0') b,
(select d.dmsb, d.dmmc
from sghis.hd_gy_dmzd d
where d.dmlb = '8'
and d.xtsb = '0') e
where t.office_code = a.office_code
and t.work_position = b.dmsb(+)
and t.technic_title = e.dmsb(+)
and t.hos_id = '$P!{hos_id}'
and t.employee_name like '%$P!{employee_name}%'
and t.office_code like '%$P!{office_code}%'
and t.py_code like '%$P!{py_code}%'
and t.wb_code like '%$P!{wb_code}%'
order by t.office_code
### OracleCASE WHEN 的简写方法或替代方案 在 Oracle 数据库中,`CASE WHEN` 和 `DECODE` 是两种常用的条件判断方式。以下是它们的具体使用方法及其对比: #### 1. **CASE WHEN 的简化形式** Oracle 提供了两种类型的 `CASE` 表达式:简单 `CASE` 函数和搜索 `CASE` 函数。 - **简单 CASE 函数** 简单 `CASE` 可以通过省略重复的列名来实现更简洁的形式。例如: ```sql SELECT A.StuName, (CASE A.ClassID WHEN 1 THEN '一班' WHEN 2 THEN '二班' ELSE '三班' END) AS ClassName FROM Student A; ``` 这里不需要每次写出 `A.ClassID`,而是直接跟上对应的值即可[^3]。 - **搜索 CASE 函数** 如果条件较为复杂,可以使用搜索 `CASE` 形式。它允许编写任意布尔表达式作为条件: ```sql SELECT CASE WHEN score >= 90 THEN '优秀' WHEN score BETWEEN 70 AND 89 THEN '良好' ELSE '一般' END AS GradeLevel FROM Scores; ``` #### 2. **DECODE 函数的使用** `DECODE` 是 Oracle 特有的函数,用于简单的等值比较操作。它的语法如下: ```plaintext DECODE(expression, search1, result1 [, search2, result2 ...], default) ``` 其中: - `expression`: 要匹配的目标值。 - `searchN`: 需要目标值进行比较的值。 - `resultN`: 当匹配成功时返回的结果。 - `default`: 所有条件都不满足时的默认返回值(可选)。 示例代码: ```sql SELECT StuName, DECODE(ClassID, 1, '一班', 2, '二班', '三班') AS ClassName FROM Student; ``` 此查询的功能前面提到的简单 `CASE` 完全一致[^2]。 需要注意的是,`DECODE` 只能处理相等关系的逻辑判断;而 `CASE` 支持更加复杂的布尔表达式,因此适用范围更广[^5]。 #### 3. **性能对比** 通常情况下,在功能相同的情况下,`DECODE` 的执行效率稍高于 `CASE`,因为其内部优化较好。但在现代版本的 Oracle 中,两者的差异已经非常微小,建议根据实际需求选择合适的结构[^4]。 --- ### 总结 对于 ORACLE 中的条件判断,可以选择以下几种方式: - 使用完整的 `CASE WHEN` 实现灵活多变的业务逻辑; - 利用简化版的 `CASE` 来减少冗余书写; - 对于单纯的等值替换场景,推荐采用高效便捷的 `DECODE` 方法。 以上即为关于 ORACLE 中 `CASE WHEN` 简化或者替代方案的相关说明。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值