OCP-1Z0-051 第103题 CASE.. WHEN,TO_CHAR,TRIM的用法

博客讨论了在Oracle中使用CASE WHEN, TRIM 和 TO_CHAR 函数来判断交易日期是工作日还是周末。通过示例查询,解释了为什么第一种查询方法正确,第二种不正确,原因是TO_CHAR函数返回的星期名称带有额外空格,导致BETWEEN...AND操作无法正确匹配。" 2555985,154720,理解JavaScript中的Spread语法,"['JavaScript', 'Web开发', '数据库操作', '前端框架', '编程技巧']

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

一、原题
Examine the structure of the TRANSACTIONS table:
Name          Null          Type
TRANS_ID      NOT NULL     NUMBER(3)
CUST_NAME                  VARCHAR2(30)
TRANS_DATE                 DATE
TRANS_AMT                  NUMBER(10,2)
You want to display the transaction date and specify whether it is a weekday or weekend.
Evaluate the following two queries:
SQL>
SELECT TRANS_DATE,
             CASE
               WHEN TRIM(TO_CHAR(trans_date, 'DAY')) IN ('SATURDAY', 'SUNDAY') THEN
                'weekend'
               ELSE
                'weekday'
             END "Day Type"
       FROM transactions;

SQL>
SELECT TRANS_DATE,
             CASE
               WHEN TO_CHAR(trans_date, 'DAY') BETWEEN 'MONDAY' AND 'FRIDAY' THEN
                'weekday'
               ELSE
                'weekend'
             END "Day Type"
       FROM transactions;


Which statement is true regarding the above queries?
A. Both give wrong results.
B. Both give the correct  result.
C. Only the first query gives the correct result.
D. Only the  second query gives the correct result.

答案:C


二、题目翻译
查看TRANSACTIONS 表的结构
要显示transaction date,并指定该日期是工作日还是周末
下面是两个查询语句:
关于上面的查询哪句话是正确的?
A.两个给出错误结果。
B.两个给出正确结果。
C.第一个给出正确结果。
D.第二个给出正确结果。

三、题目解析
第一句正确,用TO_CHAR(trans_date,'DAY')先显示出星期几,然后用trim把多余的空格去掉,然后用case when判断,是否是周六、周日,是的话就显示为周末,否则显示为工作日。
第二句不正确,TO_CHAR(trans_date,'DAY')转换出来的星期几,是有多余空格的,所以直接是无法匹配的,而且,这里是字符串,这样用BETWEEN..AND无法做出正确的判断,所以是否工作日,都显示成了周末。

CASE WHEN的用法,详见:
         http://blog.csdn.net/holly2008/article/details/23140591

四、测试
       我测试时,sysdate是2014.5.8,星期四,是工作日,不是周末, 第一句能正确显示,第二句显示不正确。

--第一句正确
SQL> SELECT sysdate,CASE
  2  WHEN TRIM(TO_CHAR(sysdate,'DAY')) IN ('SATURDAY','SUNDAY') THEN 'weekend'
  3  ELSE 'weekday'
  4  END "Day Type"
  5  FROM dual;

SYSDATE      Day Type
------------ --------------
08-MAY-14    weekday

--第二句,显示结果不正确
SQL> SELECT sysdate, CASE
  2  WHEN TO_CHAR(sysdate,'DAY') BETWEEN 'MONDAY' AND 'FRIDAY' THEN 'weekday'
  3  ELSE  'weekend'
  4  END "Day Type"FROM dual;

SYSDATE      Day Type
------------ --------------
08-MAY-14    weekend

--第二句,加了TRIM之后,还是无法判断正确,显示错误
SQL> SELECT sysdate, CASE
  2  WHEN trim(TO_CHAR(sysdate,'DAY')) BETWEEN 'MONDAY' AND 'FRIDAY' THEN 'weekday'
  3  ELSE  'weekend'
  4  END "Day Type"FROM dual;

SYSDATE      Day Type
------------ --------------
08-MAY-14    weekend

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值