Oracle 中DECODE 函数的 使用简介

** Oracle 中 DECODE 函数的 使用简介

**

DECODE(base_expr,compare1,value1,compare2,value2,….default)

此函数 用在 SQL 语句中 ,功能介绍如下:

DECODE 函数与一系列嵌套的 IF-THEN-ELSE 语句相似。 base_exp 与 compare1,compare2 等等依次进行比较。如果 base_exp 和 第 i 个 compare 项匹配,就返回第 i 个对应的 value 。如果 base_exp 与任何的 compare 值都不匹配,则返回 default 。每个 compare 值顺次求值,如果发现一个匹配,则剩下的 compare 值(如果还有的话)就都不再求值。一个为 NULL 的 base_exp 被认为和 NULL compare 值等价。如果需要的话,每一个 compare 值都被转换成和第一个 compare 值相同的数据类型,这个数据类型也是返回值的类型。

DECODE函数在实际开发中非常的有用。比如在WEB开发中,一个构造查询条件的页面上,给出了几个查询条件让用户填写,

如果用户没有填写某个查询条件,就默认在后台赋一个值。如果填了的话,查询条件就是用户填写的那个。

例如:前台需要用户输入某个编号以及其他信息来查询产品信息,在 where 条件中有这么一句:(其中“ : 单件虚拟编号”是参数行,从前台获得。)

…AND DECODE(: 单件虚拟编号 , NULL l,A. 单件虚拟编号 ,: 单件虚拟编号 )=A. 单件虚拟编号 …

这就是说,如果用户在页面没填写“单件虚拟编号”字段,那么后台接收到的就是 NULL。在DECODE函数中,就返回A表的单件虚拟编号值(默认值),如果用户填写了该字段,DECODE函数返回的就是用户填写的值。

** 结合LPAD函数,如何使主键的值自动加1并在前面补0
** select LPAD(decode(count(记录编号),0,1,max(to_number(记录编号)+1)),14,'0') 记录编号
from tetdmis.zf_钻井日报表

Published At
Categories with 数据库类
Tagged with
comments powered by Disqus