以前用sql server 时,做时间比较 都 是直接用,比如 select * from tabname where datecol <‘2010-11-23’;
但是改用ORACLE以后我相信开始大家都会遇到为什么时间不可以对比了,结果才知道要用时间函数to_date()转换格式,今天做了个实验,也可以让它像SQL SERVER一样不用to_date()做时间比较,不过在此声明 ORACLE不建议使用隐式转换。
实验开始。。
[oracle@orazhang ~]$ sqlplus zhang/weizhao
SQL*Plus: Release 10.2.0.1.0 – Production on 星期三 11月 24 00:13:56 2010
Copyright (c) 1982, 2005, Oracle. All rights reserved.
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 – Production
With the Partitioning, OLAP and Data Mining options
SQL> create table test_date(id int,name varchar2(6),birthday date);
Table created.
SQL> insert into test_date values(1,’weizha’,sysdate-365*20);
1 row created.
SQL> select * from test_date;
ID NAME BIRTHDAY
———- ———— ————–
1 weizha 29-11月-90
SQL> commit;
Commit complete.
SQL> select * from test_date where birthday<‘2010-1-1’;
select * from test_date where birthday<‘2010-1-1’
*
ERROR at line 1:
ORA-01861: literal does not match format string
SQL> alter session set nls_date_format=’yyyy-mm-dd’;
Session altered.
SQL> select * from test_date where birthday<‘2010-1-1’;
ID NAME BIRTHDAY
———- ———— ———-
1 weizha 1990-11-29
实验结束
只要更改nls_date_format就可以,toad 上也是如此!同样number和char也存在隐式转换,再提示一下 不建议使用隐式转换!而使select * from test_date where birthday<to_date(‘2010-1-1′,’yyyy-mm-dd’);
I used to be recommended this web site by means of my cousin. I am no longer certain whether this publish is written via him as nobody else understand such distinct approximately my problem. You are incredible! Thank you!
That’s not just the best awnser. It’s the bestest answer!
这个不懂,看看就好。。
Great thninkig! That really breaks the mold!