Oracle SQL 当前日期
Posted
技术标签:
【中文标题】Oracle SQL 当前日期【英文标题】:Oracle SQL Current_Date 【发布时间】:2018-05-14 17:05:43 【问题描述】:我在简单查询中使用 Current_Date 函数时遇到了一些问题,我无法弄清楚原因。我在使用 Oracle SQL Developer 3.2 的 Oracle 12c 环境中工作。
我的原始查询如下所示:
select * from Inventory where Placement_End_Dt >= Current_date
上述工作正常,只是它没有拾取 Placement_End_Dt 今天(18 年 5 月 14 日)所在的记录
我试图将查询简化如下,但这也没有返回任何内容
select * from Inventory where Placement_End_Dt = Current_date
但是,当我按如下方式应用日期格式时,它可以工作:
select * from Inventory where to_char(Placement_End_Dt, 'DD-MM-YYYY') = to_char(Current_date, 'DD-MM-YYYY')
然后我尝试对此进行扩展以恢复到我的原始查询以选择结束日期从今天开始的所有记录:
select * from Inventory where to_char(Placement_End_Dt, 'DD-MM-YYYY') => to_char(Current_date, 'DD-MM-YYYY')
这非常失败,因为它选择了具有 Placement_End_Dt 过去、现在和未来的记录!
Placement_End_Dt 列被定义为 Oracle DATE 数据类型
希望能提供一些关于如何让这个查询起作用的意见。
【问题讨论】:
【参考方案1】:当使用to_char
时,您正在比较字符串。
to_char(date '2000-01-20', 'DD-MM-YYYY') > to_char(date '2018-05-14', 'DD-MM-YYYY')
因为 '20-01-2000' 大于 '14-05-2018',因为字符串中的第一个字母:'2' > '1'。
而CURRENT_DATE
几乎从未使用过,因为它使用的是您的计算机时间,而不是数据库时间,因此您可以轻松地休息几个小时。请改用SYSDATE
。
【讨论】:
【参考方案2】:我建议使用这个查询
select * from Inventory where trunc(Placement_End_Dt) = trunc(sysdate);
默认情况下,Oracle 日期列还存储时间戳,因此除非记录到第二个记录相同,否则它们将不匹配。当您在日期列上使用 trunc() 时,它会截断时间戳并只留下日期。
【讨论】:
【参考方案3】:试试这个,它将返回当前和未来的行。
select * from Inventory where trunc(Placement_End_Dt) >= trunc(sysdate);
【讨论】:
我觉得可以简化为where placement_end_dt >= trunc(sysdate);
以上是关于Oracle SQL 当前日期的主要内容,如果未能解决你的问题,请参考以下文章
oracle 数据太多 想只显示当前日期前三天的数据 条件语句怎么写呢?