Oracle函数-DECODE

DECODE翻译为解码或译码,因为它可以把查询结果翻译成令用户容易理解的内容。

语法:

QQ截图20160606221410

expr: 表达式

search:搜索值

result:结果值

default:默认值

DECODE函数的第一个参数是表达式,之后是成对的搜索值-结果值,最后是一个默认值。参数可以是任何数字类型或字符类型。

DECODE函数的作用是把表达式的的值与一些列搜索值比较,当表达式的值与搜索值相等时,返回搜索值对应的结果值,如果没有找到相等的搜索值,则返回默认值,如果默认值没有定义,返回NULL。执行逻辑跟CASE语句很相似。

参数类型的处理方式如下:

  • 如果表达式和搜索值是字符数据,Oracle采用nonpadded semantics比较它们。结果值是VARCHAR2类型,并与第一个结果值的字符集相同。
  • 如果第一对搜索值-结果值为数字类型,Oracle会比较所有的搜索值-结果值及表达式,按数字优先级来决定参数类型,并把其它参数的类型转换为该类型。

搜索值、结果值和默认值可以由表达式(不是指第一个表达式参数)计算。Oracle数据库使用短路计算的方式,仅在比较每个搜索值与表达式时才结算搜索值,而不是一次计算所有的搜索值。因此Oracle在找到等于表达式的值后,即使后面还有搜索值,也不会去计算它。

Oracle在比较表达式和每个搜索值时,先把它们转换为第一个搜索值得数据类型。Oracle自动将返回的结果值转换为第一个结果值的数据类型。如果第一个结果值的数据类型为CHAR或NULL,那么Oracle会将结果值转换为VARCHAR2。

在DECODE函数中,Oracle认为两个NULL值是相等的,如果表达式为NULL,Oracle返回第一个为NULL的搜索值的结果值。

DECODE参数的最大数量为255个。

下面的例子演示了DECODE函数的使用。DECODE将warehouse_id的值翻译成容易理解的字符串。如果warehouse_id的值是1,函数返回Southlake,如果warehouse_id的值是2,函数返回San Francisco。。。如果warehouse_id的值不是1,2,3,4,则返回Non domestic。

SELECT

product_id, DECODE (warehouse_id, 1, 'Southlake', 2, 'San Francisco', 3, 'New Jersey', 4, 'Seattle', 'Non domestic') "Location"FROM inventories WHERE product_id < 1775 ORDER BY product_id, "Location";

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值