SELECT count(*) FROM test where (test.BEDAT) > '2000/01/01'SELECT count(*) FROM test where TO_DATE(test.BEDAT) > '2000/01/01' BEDAT在数据库中是verchar类型,请问这两种方法有什么区别?
解决方案 »
- Oracle中,是否支持带参数的视图。
- 我真的无路可走了吗?慢!!
- 求批量Update修改错误数据的语句!紧急!!
- 求帮忙
- 急求查询语句使用方法---100分送出 再线等
- 菜鸟求一update语句
- PL/SQL 怎么判断一个studentID 是否在student 表中 ??
- 求救一个简单问题
- “只取一瓢”、KingSunSha(弱水三千) 请来一下,树形SQL语句的问题。
- 我要对表中的一列重命名,应该怎么做?
- Oracle11g R2在旗舰版Win7下的安装问题
- W7安装完oracle10g后,创建数据库,去提示对快捷方式下引用的项目权限不够!!!!安装中,我是修改了文件夹属性下的用户完全控制权限。
那如果不使用TO_DATE(),比较的就是两个字符的ASCII值大小,而不是日期。
像第二句加了TO_DATE(),之后的'2000/01/01'就会隐式转换成日期格式,从而进行日期的比较。
能这样吗?
什么意思?
select TO_DATE('20000101','yyyymmdd') from dual;
这个可以的
建议以后还是先对字符类型的进行TO_DATE()再比较,以免发生不必要的问题。
可以看到他们的ASCII值是一样的,所以才会使你>'2000/01/01'和>'20000101'的写法有一样的结果
如果不进行TO_DATE()转换,可能会出现什么问题?
但是如果数据库中的数据格式是“2000/01/01”,类型还是vercgar2,这样比较的话两条语句的结果是不一样的,为什么?
但是,如果数据类型都是varchar2,是不会涉及到数据转换的,日期比较就更别说了。
你的第二条语句:在BEDAT上使用了函数to_date,我都怀疑你的语句能否执行成功,不同类型的值是不可以进行比较的要比较日期必须两边都是日期类型.