OCP-1Z0-051 第94题 MONTHS_BETWEEN,NVL函数

本文详细解析了Oracle数据库中MONTHS_BETWEEN和NVL函数的使用,通过实例展示了如何正确使用这两个函数。在给出的四个SQL语句中,选项A和D能够成功执行,因为它们的参数类型在NVL函数中保持一致。而选项B和C由于类型转换问题会导致错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、原题
Examine the structure of the PROGRAMS table:
Name            Null          Type
PROG_ID         NOT NULL     NUMBER(3)
PROG_COST                    NUMBER(8,2)
START_DATE      NOT NULL     DATE
END_DATE                     DATE
Which two SQL statements would execute successfully? (Choose two.)
A. SELECT NVL(ADD_MONTHS(END_DATE,1),SYSDATE)
        FROM programs;
B. SELECT TO_DATE(NVL(SYSDATE-END_DATE,SYSDATE))
        FROM programs;
C. SELECT NVL(MONTHS_BETWEEN(start_date,end_date),'Ongoing')
         FROM programs;
D. SELECT NVL(TO_CHAR(MONTHS_BETWEEN(start_date,end_date)),'Ongoing')
        FROM programs;

答案:AD

二、题目翻译
查看PROGRAMS表的结构
哪两个SQL语句执行成功?(选择两个)

三、题目解析
A选项正确,ADD_MONTHS返回date类型,第二参数sysdate也是date类型,NVL两个参数类型一致。
B选项不正确,SYSDATE-END_DATE结果是一个number类型,nvl的第二个参数是date类型,会隐式转换为number类型,to_date参数是number类型,会报错。
C选项不正确,MONTHS_BETWEEN返回一个number类型,nvl第一个参数number类型,第二个参数字符串类型,无法隐式转换,报错。
D选项正确,MONTHS_BETWEEN返回的是number类型,to_char转成了字符类型,这样nvl的两个参数类型一致。

Months_between函数:返回一个number类型,如果第一个参数的日期大于第二个参数参数的日期,则返回正数,否则返回负数。

四、测试
         B选项测试结果:
SQL> select sysdate-to_date('2014-1-2','yyyy-mm-dd') from dual;

SYSDATE-TO_DATE('2014-1-2','YYYY-MM-DD')
----------------------------------------
                              126.466042

SQL> select nvl(sysdate-to_date('2014-1-2','yyyy-mm-dd'),sysdate) from dual;

NVL(SYSDATE-TO_DATE('2014-1-2','YYYY-MM-DD'),SYSDATE)
-----------------------------------------------------
                                            126.46706

SQL> select to_date(126.3) from dual;
select to_date(126.3) from dual
               *
ERROR at line 1:
ORA-01861: literal does not match format string

      
       C选项测试结果:

SQL> select nvl(months_between(sysdate,to_date('2014-1-2','yyyy-mm-dd')),'Ongoing') from dual;
select nvl(months_between(sysdate,to_date('2014-1-2','yyyy-mm-dd')),'Ongoing') from dual
                                                                    *
ERROR at line 1:
ORA-01722: invalid number

      
       NVL函数的详细用法,参考:
                http://blog.csdn.net/holly2008/article/details/25251513

         MONTH_BETWEETN的用法详见:
            
http://blog.csdn.net/holly2008/article/details/23141827
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值