Oracle SQL Current_Date

0 sql oracle sysdate

我在一个简单的查询中使用Current_Date函数时遇到了一些问题,但我无法弄清楚原因.我正在使用Oracle SQL Developer 3.2在Oracle 12c环境中工作.

我的原始查询看起来像这样:

select * from Inventory where Placement_End_Dt >= Current_date
Run Code Online (Sandbox Code Playgroud)

以上工作正常,但它没有获取Placement_End_Dt今天(5月14日18日)的记录

我尝试按如下方式简化查询,但这也不会返回任何内容

select * from Inventory where Placement_End_Dt = Current_date
Run Code Online (Sandbox Code Playgroud)

但是,当我按如下方式应用日期格式时,它可以工作:

select * from Inventory where to_char(Placement_End_Dt, 'DD-MM-YYYY') = to_char(Current_date, 'DD-MM-YYYY')
Run Code Online (Sandbox Code Playgroud)

然后我尝试对此进行扩展以恢复到我的原始查询,以选择具有从今天开始的结束日期的所有记录:

select * from Inventory where to_char(Placement_End_Dt, 'DD-MM-YYYY') => to_char(Current_date, 'DD-MM-YYYY')
Run Code Online (Sandbox Code Playgroud)

这非常失败,因为它选择了Placement_End_Dt过去,现在和未来的记录!

Placement_End_Dt列定义为Oracle DATE数据类型

希望得到一些关于我如何使这个查询工作的输入.

Tho*_*ner 5

使用时,to_char您正在比较字符串.

to_char(date '2000-01-20', 'DD-MM-YYYY') > to_char(date '2018-05-14', 'DD-MM-YYYY')
Run Code Online (Sandbox Code Playgroud)

因为'20 -01-2000'大于'14 -05-2018',因为字符串中的第一个字母:'2'>'1'.

并且CURRENT_DATE几乎没有使用过,因为它使用的是计算机的时间,而不是数据库的时间,因此您可以轻松地休息几个小时.请SYSDATE改用.