Oracle查询没有给current_date提供结果

时间:2017-04-11 05:18:59

标签: oracle oracle11g

Oracle中用于获取current_date数据的查询是什么 列end_date类似于以下

module roller(input clk, input rst, input UP, input DOWN, output reg LEDS[3:0]);

reg UP1, DOWN1;

always @(posedge clk or posedge rst)
if (rst) begin
    LEDS[3:0] <= 4'b0001;
end 
else
begin
    UP1 <= UP;
    DOWN1 <= DOWN;
    if (UP & ~UP1) begin
         LEDS[3:0] <= {LEDS[2:0], LEDS[3]};
    end
    else if (DOWN & ~DOWN1) begin
         LEDS[3:0] <= {LEDS[0], LEDS[3:1]};
    end
end
endmodule;

就像我正在运行以下查询

end_date
27-10-16 03:35:00.000000000 PM
23-11-16 11:15:00.000000000 AM
02-11-16 03:00:00.000000000 PM
08-11-16 09:00:00.000000000 AM

它正在成功运行,但当我用当前日期替换查询时...它没有给出结果

Select * from table1
where end_date < TO_DATE('2017-04-11 00:00:00', 'YYYY-MM-DD HH24:MI:SS')

有人可以告诉我第二个查询没有给出结果的原因是什么。

3 个答案:

答案 0 :(得分:2)

CURRENT_DATE返回日期。无需使用TO_DATE。以下查询应该足够了。

Select * from table1
  where end_date < current_date;

如果您运行以下查询,您将了解问题所在。年变为0011。

SELECT TO_DATE(current_date, 'YYYY-MM-DD HH24:MI:SS') FROM DUAL;

请注意CURRENT_DATE会在会话时区返回当前日期。 SYSDATE返回为数据库所在的操作系统设置的当前日期和时间。这意味着CURRENT_DATESYSDATE可以返回不同的结果。您可以查看this

答案 1 :(得分:0)

CURRENT_DATE已经是DATE值。如果需要,可以使用to_char格式化输出。

end_date < CURRENT_DATE应该做的工作。或者,您可以相应地设置nls参数,以提高可读性。

如果您只比较日期,没有时间戳,则可以使用trunc()

答案 2 :(得分:0)

查询的工作原理如下:

Select * from table1
    where trunc(end_date) < trunc(sysdate)

Trunc用于比较两个日期并获取结果。