Oracle DECODE

来源:互联网 发布:网络诈骗的款能追回吗 编辑:程序博客网 时间:2024/05/29 15:09

语法:

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;

 

 

原文

 

原创粉丝点击