Oracle DECODE

语法:

 
DECODE(expr, search, result [, search, result ]... [, default ] )
 

应用:

DECODE函数将每一个exprsearch的值做比较。如果expr的值与search的值相等,Oracle数据库就会返回相应的result。如果找不到匹配的值,Oracle返回default。如果没有defaultOracle返回null值。

参数可以是任意数值类型(NUMBERBINARY_FLOAT, or BINARY_DOUBLE)和字符型。

   1、如果exprsearch是字符型,Oracle通过非填充的比较语义来比较它们。exprsearchresult可以是CHAR, VARCHAR2, NCHAR, or NVARCHAR2任意类型的数据类型。字符串返回的是VARCHAR2型数据类型,它和第一个result参数处于同一个字符集。

   2、如果第一个search-result对是数值型的,Oracle会比对所有的search-result表达式以及expr来决定具有最高优先级的参数数值,并隐式转换其余参数的数据类型以及返回值的数据类型。

searchresultdefault的值可以由表达式运算得来。Oracle数据库使用的是短路评价。也就是说,数据库只在将每个search值和expr值对比之前才评价search的值,而不是在与expr对比之前评价所有的search值。

Oracle在比对之前自动将expr和每个search的值转换成第一个search值的数据类型,并自动将返回值转换成与第一个result相同的数据类型。如果第一个resultCHAR数据类型或者为NULLOracle会将返回值转换成VARCHAR2类型。

DECODE函数里,Oracle将两个null值认为是相等的。如果expr和第一个search同时为空,那Oracle会返回所有所有的result

 

DECODE所能容纳的最大参数数目是255个,这其中包括exprsearchresult以及default

例子:

例子解码warehouse_id的值,如果warehouse_id1,返回Southlake,为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 of inventory" FROM inventories
       WHERE product_id < 1775;

 

 

原文

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值