一、原题
二、题目翻译
三、题目解析
四、测试
我测试时,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
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
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.第二个给出正确结果。
要显示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
第二句不正确,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