`
wwty
  • 浏览: 542917 次
  • 性别: Icon_minigender_1
  • 来自: 北京-郑州
社区版块
存档分类
最新评论

oracle的decode函数和TO_CHAR函数

阅读更多

1、decode函数:

decode 函数语法如下:

decode( expression , search , result [, search , result]... [, default] )


expression 要比较的表达式.

search 要与expression 比较的字段。

result 如果expression 与search 一样的话,返回该结果。

default 此参数可选,如果没有与expression 匹配上的search . 就返回此结果,如果此参数没有设置,当没有与expression匹配上的search时,返回null。
search 和 result可成对出现多次,代表各种要匹配的情况。

 

例子:

SELECT DECODE(M.LX_SJ,
             '1',
             D.STRING_SX_VALUE,
             '2',
             TO_CHAR(D.INT_SX_VALUE),
              '3',
             TO_CHAR(D.value_sx_btxm, 'fm99999990.0000'),
              '4',
              TO_CHAR(D.DATE_SX_VALUE, 'yyyy-MM-dd'),
             '5',
              D.STRING_SX_VALUE,
              '')
             FROM XX_SX_BTXM D
             WHERE M.DM_BTXM = D.DM_BTXM
             AND M.DM_SX_BTXM = D.DM_SX_BTXM
             AND D.DM_XZQH = XZQH.DM_XZQH

 

又如:

select supplier_name,decode(supplier_id,1000,'IBM',10001,'Microsoft','1002','Hewlett Packard','Gateway') result from suppliers;

 上面的sql语句相当于下面的IF-THEN-ELSE :

IF supplier_id = 10000 THEN
     result := 'IBM';
ELSIF supplier_id = 10001 THEN
    result := 'Microsoft';
ELSIF supplier_id = 10002 THEN
    result := 'Hewlett Packard';
ELSE
    result := 'Gateway';
END IF;

 decode 函数会挨个匹配supplier_id 的值.

 

使用时的常见问题:

问题1:  现在一个阅读者想问,怎么使用decode函数来比较两个日期呢?(例如:date1 和 date2), 如果date1 > date2, decode 函数返回date2. 否则decode函数返回 date1.
回答:  要实现上述要求,可使用decode函数如下:
decode((date1 - date2) - abs(date1 - date2), 0, date2, date1)
如果date1大于date2,下面表达是会等于0:
(date1 - date2) - abs(date1 - date2)
帮助性提示: 可用decode函数绑定SIGN 函数 像下面这样:
上面比较日期的语句可修改如下:
DECODE(SIGN(date1-date2), 1, date2, date1)
SIGN/DECODE 联合对于有关销售红利等数字方面的比较是非常有用的。
DECODE(SIGN(actual-target), -1, 'NO Bonus for you', 0,'Just made it', 1, 'Congrats, you are a winner')

 

问题2:  我想知道是否可以用decode函数来确定数字范围,例如 1-10 = 'category 1', 11-20 = 'category 2', 比一个一个比较应该会好一点吧.
回答: 不幸的告诉你,不可以用decode函数来确定数字的范围. 可是你可以试着创建一个表达式,这个表达式可以得一个数字指定的范围, 下一个数字对应下一个指定的范围, 以此类推.
例如:
select supplier_id,decode(trunc((supplier_id-1)/10),0,'category 1',1,'category 2',2,'category 3','unknown') result from suppliers;
 
这个例子基于这个公式:trunc ((supplier_id - 1) / 10
 
如果supplier_id在1和10之间,表达式计算值=0.
如果supplier_id在11和20之间,表达式计算值=1.
如果supplier_id在21和30之间,表达式计算值=3.

 

 

问题3:  我想写一个decode函数,要求如下:
如果 yrs_of_service < 1 返回 0.04
如果 yrs_of_service >= 1 and < 5 返回0.04
如果 yrs_of_service > 5 返回 0.06
这种情况我该怎么做呢?
回答:  You will need to create a formula that will evaluate to a single number for each one of your ranges.
For example:
select emp_name,decode(trunc((yrs_of_service+3)/4),0,0.04,1,0.04,0.06) as perc_value from employees;

 

 

 

问题4:  decode函数的参数个数有限制吗?我得到一个错误 "ORA-00939: too many arguments for function".
回答:  是的,decode函数的最大参数个数为255个,包括expression, search, and result arguments.<!-- InstanceEndEditable -->

分享到:
评论

相关推荐

    Oracle中TO_DATE、TO_CHAR,Oracle函数大全

    在Oracle数据库中,`TO_DATE` 和 `TO_CHAR` 是两个非常重要的转换函数,它们用于在日期和字符串之间进行转换。这两个函数对于处理日期相关的数据至关重要,尤其在数据分析和报表生成时。 `TO_DATE` 函数是将字符...

    关于oracle decode函数的用法

    通过以上实例可以看出,DECODE函数在Oracle数据库中是一个非常灵活且强大的工具,能够帮助我们在查询中实现复杂的条件判断和数据处理,特别是在需要进行行列互换、数据聚合等场景下,DECODE函数的应用显得尤为关键。

    ORACLE 列转行 DECODE函数用法

    在Oracle数据库中,DECODE函数是一个非常实用的工具,它允许你在SQL查询中进行条件判断,将特定的值转换为其他值。DECODE函数在处理列转行的问题时,尤其适用于将多列数据合并到一行中,使得数据展示更加简洁明了。...

    ORACLE函数解决SQL语句中的两类Y2K问题.pdf

    例如,可以使用 TO_CHAR 函数将日期字段转换为字符串,然后使用 SUBSTR 函数截取字符串的前两位,以解决日期问题。 本文还介绍了其他解决方法,例如使用 DECODE 函数来将日期字段转换为不同的格式,以解决 Y2K 问题...

    decode函数.pdf

    例如,使用to_char函数结合decode函数对数据进行分组求和: SELECT SUM(DECODE(bank_code,001,tran_val,0)) FROM pay_lst; 这个语句会计算所有银行代码为001的交易值之和。 此外,Decode函数还被应用于PL/SQL代码...

    oracle日常函数文档

    在处理日期和时间数据时,Oracle提供了诸如`SYSDATE`, `ADD_MONTHS()`, `MONTHS_BETWEEN()`, `EXTRACT()`, `TO_DATE()`, `TO_CHAR()`等函数。`SYSDATE`返回当前系统日期,`ADD_MONTHS()`可以添加或减去指定月份数,`...

    ORACLE_FUNCTION.rar_oracle

    Oracle提供了一系列函数用于数据类型的转换,如TO_CHAR、TO_DATE和TO_NUMBER。TO_CHAR可以将日期或数值转换为字符串,而TO_DATE则将字符串转换为日期,TO_NUMBER则是将字符串转换为数值。这些函数在处理不同数据类型...

    oracle 函数大全 参考函数 手册 速查 chm格式

    4. 转换函数:如TO_CHAR(字符串转换为日期或数字)、TO_DATE(日期转换为字符串)等,实现不同数据类型间的转换。 5. 条件函数:如IFNULL(如果为空则替换)、NVL(空值替换)、DECODE(根据条件返回值)等,处理...

    Oracle SQL 函数使用说明

    4. TO_CHAR函数:与TO_DATE相反,TO_CHAR将日期或数值转换为字符串,其语法为TO_CHAR(日期/数值, 格式模式)。日期格式模式包括元素如'YYYY'表示四位年份,'MM'表示月份,'DD'表示日期,还可以使用AM/PM标志,世纪值...

    Oracle常用函数及实例.pdf

    本文主要探讨了Oracle中的一些常用函数,并通过实例解析了它们的基本用法,特别介绍了DECODE函数的使用技巧。 首先,我们来看数字函数。在Oracle中,ABS(x)函数用于计算数值的绝对值,例如ABS(-10)返回10。CEIL(x)...

    oracle内置函数学习

    日期和时间处理是数据库操作中常见的需求,Oracle的内置日期函数如SYSDATE获取当前系统日期,ADD_MONTHS()用于增加或减少月份,EXTRACT()可以从日期中提取年、月、日等部分,而TO_CHAR()和TO_DATE()则用于日期和字符...

    oracle函数大全中文

    日期函数在处理时间序列数据时非常关键,如`SYSDATE`获取当前系统日期,`ADD_MONTHS`增加或减少月份,`EXTRACT`提取日期部分,`TO_DATE`和`TO_CHAR`进行日期与字符串之间的转换,还有`NEXT_DAY`找到下一个特定星期的...

    ORACLE函数大全与整理

    3. 日期时间函数:如SYSDATE获取当前系统日期,ADD_MONTHS()添加月份,TO_CHAR()和TO_DATE()用于日期和字符串的转换。 4. 转换函数:如TO_NUMBER()将字符串转换为数字,TO_BINARY_FLOAT()和TO_BINARY_DOUBLE()用于...

    Oracle特色函数与复杂更新应用.pptx

    Oracle数据库系统提供了丰富的函数和特性,以满足各种复杂的操作需求。在本篇中,我们将深入探讨Oracle的一些特色函数,包括转换函数、通用函数、日期函数以及复杂的更新应用,这些都是在日常的数据库管理和开发中...

    Oracle内置函数大全.rar

    3. **日期时间函数**:如`SYSDATE`获取当前系统日期,`ADD_MONTHS`增加或减少日期,`EXTRACT`用于提取日期或时间部分,`TO_CHAR`和`TO_DATE`用于日期和字符串之间的转换。 4. **转换函数**:包括`TO_NUMBER`将字符...

    oracle 10G函数大全(中文)

    这个中文帮助文档是开发者和DBA们在进行Oracle数据库操作时的重要工具,它能提供详尽的函数解释、用法示例以及相关提示。 1. **SQL函数类别**: - 数学函数:如ABS、MOD、ROUND等,用于数学计算和数值处理。 - ...

    oracle-10G函数大全.chm

    4,转换函数(convert()、to_char()、to_date()、to_number()...); 5,聚组函数(avg()、sum()、max()、min()、stddev()...); 6,分析函数(sum(...) over(...)、dense_rank、row_number()、lag()...); 7,其它函数...

    oracle一些常用函数笔记和简单例子

    ### Oracle 常用函数及简单示例 ...以上是 Oracle 中一些常用函数的基本介绍及其示例,通过这些函数的应用可以极大地提高数据处理的效率和准确性。希望这些内容能帮助您更好地理解和使用 Oracle 数据库。

    Oracle函数大全

    Oracle数据库是世界上最广泛使用的数据库系统之一,其强大的功能和丰富的内置函数是其核心优势之一。在Oracle函数大全中,我们涵盖了各种类型的功能,包括数学、字符串处理、日期时间操作、逻辑判断以及转换函数等,...

Global site tag (gtag.js) - Google Analytics