Oracle where子句日期选择不起作用

时间:2018-09-18 17:43:36

标签: database oracle

基本上,可以在oracle db中使用以下脚本重新创建我的问题:

create table test
(
current_date date
);

insert into test(current_date) values(  TO_DATE('2018-02-01', 'yyyy-MM-dd') ); 
insert into test(current_date) values(  TO_DATE('2018-03-01', 'yyyy-MM-dd') ); 
insert into test(current_date) values(  TO_DATE('2018-04-01', 'yyyy-MM-dd') ); 

--select data later than May
select * from test where  current_date >=  TO_DATE('2018-05-01', 'yyyy-MM-dd') ; 

但是所有三个日期都结果出来了吗?为什么?我在这里做错了吗?

2/1/2018 12:00:00 AM
3/1/2018 12:00:00 AM
4/1/2018 12:00:00 AM

1 个答案:

答案 0 :(得分:4)

这是因为current_date是Oracle内置函数,它返回当前日期(和时间)。 Oracle名称空间的工作方式意味着内置引用胜过您的列名。

一种解决方法是在查询中使用表别名:

 select * from test t 
 where  t.current_date >=  TO_DATE('2018-05-01', 'yyyy-MM-dd') ;

这告诉Oracle您引用的是列名,而不是内置的。

显然,更好的解决方案是更改表,以免您的列名与Oracle内置组件冲突。