http://space.itpub.net/15203236/viewspace-534849

Oracle的CASE语句和表达式

上一篇 /下一篇  2009-01-09 23:19:46 / 天气: 冷 / 心情: 平静 / 个人分类:Oracle 9i性能调整学习

查看( 306 ) / 评论( 1 ) /评分( 3 / 0 )

PL/SQL里提供了两种不同的case命令:简单型和搜索型。简单型的CASE命令仅评估一个值,但搜索型CASE命令可以评估多个值。

示例一:以简单的CASE表达式的形式使用CASE命令

Create or replace function calculate_values(p_input varchar2)

Return number

Is

V_return number

Begin

V_return:=case p_input

When ‘EXPENSE’ then 1

When ‘INCOME’ then 2

Else 3

End;

Return v_return;

End;

示例二:使用搜索型case语句

Create or replace function calculate_values(p_input varchar2,p_number number)

Return number

Is

V_return number;

Begin

Case

When p_input=’EXPENSE’ and p_number<1000

Then v_return:=0;

When p_input=’EXPENSE’ and p_number<5000

Then v_return:=20;

When p_input=’EXPENSE’ and p_number>=5000

Then v_return:=40;

Else v_return:=100;

End case;

Return v_return;

End;

http://www.cnblogs.com/qiantuwuliang/archive/2009/06/03/1495770.html

sql语言中有没有类似C语言中的switch case的语句??

没有,用case   when   来代替就行了.   
       
  例如,下面的语句显示中文年月  
   
  select   getdate()   as   日期,case   month(getdate())  
  when   11   then   '十一'  
  when   12   then   '十二'  
  else   substring('一二三四五六七八九十',   month(getdate()),1)  
  end+'月'   as   月份

=================================================

CASE 可能是 SQL 中被误用最多的关键字之一。虽然你可能以前用过这个关键字来创建字段,但是它还具有更多用法。例如,你可以在 WHERE 子句中使用 CASE。

首先让我们看一下 CASE 的语法。在一般的 SELECT 中,其语法如下:

SELECT <myColumnSpec> =
CASE
WHEN <A> THEN <somethingA>
WHEN <B> THEN <somethingB>
ELSE <somethingE>
END

在上面的代码中需要用具体的参数代替尖括号中的内容。下面是一个简单的例子:

USE pubs
GO
SELECT
     Title,
    'Price Range' =
    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
FROM titles
ORDER BY price
GO

这是 CASE 的典型用法,但是使用 CASE 其实可以做更多的事情。比方说下面的 GROUP BY 子句中的 CASE:

SELECT 'Number of Titles', Count(*)
FROM titles
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
GO

你甚至还可以组合这些选项,添加一个 ORDER BY 子句,如下所示:

USE pubs
GO
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
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
GO

注意,为了在 GROUP BY 块中使用 CASE,查询语句需要在 GROUP BY 块中重复 SELECT 块中的 CASE 块。

除了选择自定义字段之外,在很多情况下 CASE 都非常有用。再深入一步,你还可以得到你以前认为不可能得到的分组排序结果集。

Oracle的CASE语句和表达式相关推荐

  1. php中的select case语句吗,VBS教程:VBScript 语句-Select Case 语句

    Select Case 语句 根据表达式的值执行几组语句之一. Select Case testexpression [Case expressionlist-n [statements-n]] . ...

  2. java case 的错误_关于java:switch case语句错误:case表达式必须是常量表达式

    我的switch-case语句昨天运行得很好. 但是当我今天早些时候运行代码时,eclipse给了我一个错误,用红色突出显示case语句并说:case表达式必须是常量表达式,它是常量我不知道发生了什么 ...

  3. oracle中sql语句排序,Oracle SQL排序方式与case语句

    我在理解带有case语句的oracle(12c)sql order by子句时遇到困难.我有一张包含以下数据的表格, SELECT DEPT_NO, DEPT_NAME FROM SORTNG_LOG ...

  4. Oracle Decode()函数和CASE语句的比较

    Oracle Decode()函数和CASE语句都是我们经常用到的,那么它们的区别在哪里呢?下面就为您详细介绍Oracle Decode()函数和CASE语句的区别,供您参考. 首先,举2个简单的例子 ...

  5. 黑猴子的家:Scala Case语句的中置(缀)表达式

    什么是中置表达式?1 + 2,这就是一个中置表达式.如果unapply方法产出一个元组,你可以在case语句中使用中置表示法.比如可以匹配一个List序列. List(1, 7, 4, 9) matc ...

  6. oracle nvarchar2问题,Oracle数据库中,使用case语句,遇到VARCHAR2与NVARCHAR2问题

    问题: 在有sqlserver数据库迁移至Oracle数据库时,遇到将VARCHAR2付给NVARCHAR2问题 原sql CASE A .kindCode WHEN '2321034' THEN'0 ...

  7. java switch 表达式_switch case语句错误:case表达式必须是常量表达式

    问题 我的switch-case语句昨天完美无缺.但是当我今天早些时候运行代码时,eclipse给了我一个错误,用红色突出显示case语句并说:case表达式必须是常量表达式,它是常量我不知道发生了什 ...

  8. Oracle中SQL语句学习五(统计分组语句group by和having)

    oracle(41) 在 应用系统开发中,进行需要统计数据库中的数据,当执行数据统计时,需要将表中的数据进行分组显示,在统计分组中是通过group by子句.分组函数.having子句共同实现的.其中 ...

  9. oracle与sql语句

    oracle与sql语句 数据库基础 Oracle数据库安装及访问 Oracle相关操作 创建表空间与用户 创建表 Oracle数据类型 创建表 修改表 DML语句 INSERT语句 UPDATE语句 ...

最新文章

  1. 浅谈几种区块链网络攻击以及防御方案之拒绝服务攻击
  2. 深度学习--说一说卷积和池化
  3. QT,C++最好的调试工具(抽象定义上的工具)
  4. 山东大学和哈工大的教师招聘条件对比,心里要有点数
  5. linux学习项目,[ Linux运维学习 ] 路径及实战项目合集
  6. python学习笔记:遍历目录
  7. git入门(廖雪峰老师)
  8. ListT转换为DataTable
  9. 26日直播预告丨 经典知识库:ASM元数据简介及案例分享
  10. python跳一跳编程构造_python实现微信跳一跳辅助工具步骤详解
  11. python微信开发入门_python tornado微信开发入门代码
  12. 苹果se2_苹果12mini登场后SE2彻底沦为智商检测机?网友:太高明
  13. Spring Boot + WebMagic 实现网页爬虫,写得太好了!
  14. java swing 圆形图标_java swing 圆形按钮
  15. 程序员的自我修炼——新手如何学好编程
  16. android 手机桌面角标,华为手机设置桌面图标角标提醒的实现
  17. 计算机系统引导失败怎么办,电脑开机出现引导失败怎么办 是什么原因造成的...
  18. 开发那些坑之使用百川趣拍sd集成真实项目
  19. FLANN (1.9.2)源码编译
  20. 通用技术课件_技术设计的一般过程 | 高中通用技术优质课展示

热门文章

  1. 2021年第十二届蓝桥杯 - 省赛 - C/C++大学B组 - I.双向排序
  2. C / C++ 软件项目的目录结构
  3. 《信息学奥赛一本通》分治算法 找数 例题
  4. 【Tools】RDB打包工具详解
  5. 【Linux系统编程】Linux 可执行文件结构与进程结构
  6. [Qt教程] 第11篇 2D绘图(一)绘制简单图形
  7. oracle10_client的安装,Oracle10.2ClientWindows安装.doc
  8. h5封装去底部_干货分享 | 一步一步教你在SpringBoot中集成微信支付H5支付
  9. window部署DM8的DEM系统
  10. Codeforces 988F. Rain and Umbrellas