Oracle SQL当前日期
在一个简单的查询中使用Current_Date函数时,我遇到了一些问题,我一直无法找出原因。我正在使用Oracle SQL Developer 3.2在Oracle 12c环境中工作 我的原始查询如下所示:Oracle SQL当前日期,sql,oracle,sysdate,Sql,Oracle,Sysdate,在一个简单的查询中使用Current_Date函数时,我遇到了一些问题,我一直无法找出原因。我正在使用Oracle SQL Developer 3.2在Oracle 12c环境中工作 我的原始查询如下所示: select * from Inventory where Placement_End_Dt >= Current_date 上述方法效果良好,但在今天(5月14日至18日)的位置,它不会拾取记录 我试图将查询简化如下,但这也不会返回任何结果 select * from Invent
select * from Inventory where Placement_End_Dt >= Current_date
上述方法效果良好,但在今天(5月14日至18日)的位置,它不会拾取记录
我试图将查询简化如下,但这也不会返回任何结果
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列定义为Oracle日期数据类型
如果您能提供一些关于如何使此查询工作的信息,我将不胜感激。当使用
进行字符比较时,您正在比较字符串
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
。当使用对字符进行比较时,您正在比较字符串
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。尝试此操作,它将返回当前日期和未来日期的行
select * from Inventory where trunc(Placement_End_Dt) >= trunc(sysdate);
尝试此操作,它将返回当前日期和未来日期的行
select * from Inventory where trunc(Placement_End_Dt) >= trunc(sysdate);
我建议使用这个查询
select * from Inventory where trunc(Placement_End_Dt) = trunc(sysdate);
Oracle日期列在默认情况下也存储时间戳,因此除非记录一直到第二个都相同,否则它们不会匹配。当您对日期列使用trunc()时,它会截断时间戳,只留下日期。我建议使用此查询
select * from Inventory where trunc(Placement_End_Dt) = trunc(sysdate);
Oracle日期列在默认情况下也存储时间戳,因此除非记录一直到第二个都相同,否则它们不会匹配。在日期列上使用trunc()时,它会截断时间戳,只留下日期。我认为可以简化为,其中placement\u end\u dt>=trunc(sysdate)
我认为可以简化为其中placement\u end\u dt>=trunc(sysdate)代码>