[每日一题] OCP1z0-047 :2013-07-18 时间格式

[复制链接]
查看11 | 回复9 | 2014-4-5 19:53:18 | 显示全部楼层 |阅读模式
本帖最后由 guoyJoe 于 2013-7-18 00:02 编辑


111111111.png (18.97 KB, 下载次数: 30)
下载附件
2013-7-17 22:29 上传



2222222222.png (401.06 KB, 下载次数: 33)
下载附件
2013-7-17 22:29 上传


这道题目是考时间格式,日期的存贮格式,在ORACLE内部都由如下七部分构成:世纪、年、月、日、小时、分钟、秒。
OK,我们来做个测试:
gyj@OCM> create table gyj_order(order_id int,order_date date);
Table created.
gyj@OCM> insert into gyj_order values(1,sysdate);

1 row created.
gyj@OCM> commit;
Commit complete.
gyj@OCM> select * from gyj_order where order_date> to_date('JUL 102006','MON DDYYYY');

ORDER_IDORDER_DAT
---------- ---------
116-JUL-13
说明答案A正确

gyj@OCM> select * from gyj_order whereto_char(order_date,'MON DD YYYY')='JUL 16 2013';

ORDER_IDORDER_DAT
---------- ---------
116-JUL-13
说明答案B正确

gyj@OCM> select to_char(add_months(sysdate,6),'MONDD YYYY') from dual;

TO_CHAR(ADD_MO
--------------
JAN 16 2014
gyj@OCM> select * from gyj_order whereorder_date> to_char(add_months(sysdate,6),'MON DD YYYY');
select * from gyj_order where order_date>to_char(add_months(sysdate,6),'MON DD YYYY')

*
ERROR at line 1:
ORA-01858: a non-numeric character was found where anumeric was expected
说明答案C不正确,时间类型与字符类型不能做比较

gyj@OCM> select * from gyj_order where order_datein(to_date('JUL 16 2013','MON DD YYYY'),to_char('JUL 16 2013','MON DD YYYY'));
select * from gyj_order where order_datein(to_date('JUL 16 2013','MON DD YYYY'),to_char('JUL 16 2013','MON DD YYYY'))

*
ERROR at line 1:
ORA-01722: invalid number


gyj@OCM> select to_char('JUL 16 2013','MON DDYYYY') from dual; select to_char('JUL 16 2013','MON DD YYYY') from dual

*
ERROR at line 1:
ORA-01722: invalid number
上面的写法是错的,已是字符就无须用to_char转化,看下面的写法才是正确的:

gyj@OCM> select to_char(to_date('JUL 16 2013','MONDD YYYY'),'MON DD YYYY') from dual;

TO_CHAR(TO_
-----------
JUL 16 2013

还有时间与字符类型不能直接计算,如下报错:
gyj@OCM> select * from gyj_order where order_datein(to_char(to_date('JUL 16 2013','MON DD YYYY'),'MON DD YYYY'));
select * from gyj_order where order_datein(to_char(to_date('JUL 16 2013','MON DD YYYY'),'MON DD YYYY'))

*
ERROR at line 1:
ORA-01858: a non-numeric character was found where anumeric was expected

答案D不正确

最终正确答案选:AB


回复

使用道具 举报

千问 | 2014-4-5 19:53:18 | 显示全部楼层
very good...
回复

使用道具 举报

千问 | 2014-4-5 19:53:18 | 显示全部楼层
SELECT EXTRACT(month FROM order_date) "Month" FROM gyj_order
我很喜欢这种用法
回复

使用道具 举报

千问 | 2014-4-5 19:53:18 | 显示全部楼层
crakme 发表于 2013-7-18 19:19
SELECT EXTRACT(month FROM order_date) "Month" FROM gyj_order
我很喜欢这种用法

喜欢就好


回复

使用道具 举报

千问 | 2014-4-5 19:53:18 | 显示全部楼层
字符日期转换比较头疼
回复

使用道具 举报

千问 | 2014-4-5 19:53:18 | 显示全部楼层
tddtds 发表于 2013-8-3 20:45
字符日期转换比较头疼



回复

使用道具 举报

千问 | 2014-4-5 19:53:18 | 显示全部楼层
select * from v$nls_parameters where parameter like '%DATE%';
alter session set nls_date_language='american';


回复

使用道具 举报

千问 | 2014-4-5 19:53:18 | 显示全部楼层
第四个选项 应该 是 in 中的选项都是日期才对吧 而不是转化函数有问题
回复

使用道具 举报

千问 | 2014-4-5 19:53:18 | 显示全部楼层
答案a需要指定下alter session set nls_date_language='american'
答案b为啥返回空?
create table test_t (id int ,order_date date);
insert into test_t values(1,sysdate);
select * from test_t where TO_CHAR(order_date,'MON DD YYYY')='JUL 20 2003';
回复

使用道具 举报

千问 | 2014-4-5 19:53:18 | 显示全部楼层
支持,楼主加油
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行