【问题标题】:SQL Issue - ODBC ConnectionSQL 问题 - ODBC 连接
【发布时间】:2017-12-20 12:51:57
【问题描述】:

目前我们有一条线从系统中提取我们订单的发货日期:

and o.actualshipdate like sysdate

Sysdate 是当前日期所有已发货订单的系统日期。

我们如何更改或调整以使其显示在当前系统日期但在特定时间范围内发货的订单:

查询使用以下行,但我们必须每天调整日期。我们希望在当前日期自动执行此操作。

下面一行需要调整:

and to_char(o.actualshipdate, 'YYYYMMDD HH24:MI') between '20171220 13:00' and '20171220 13:00'

【问题讨论】:

  • 我所知道的每个 DBMS 都有某种功能来返回今天的日期。喜欢NOW()TODAY()。由于您没有指定您使用的是什么(Oracle?MSSQL?MySQL?)我不能更具体。
  • 您好,我正在使用 Oracle。
  • 不要将日期转换为字符串。使用内置的日期数据类型和函数。

标签: sql oracle sysdate


【解决方案1】:

在 oracle 中,我们有 sysdate 来提供当前系统日期。 Check doc for sysdate

如果您想要查询最近 5 小时的发货详细信息,则条件应如下所示

and shipmentdate >= (sysdate-(5/24))

如果你想要最后 5 分钟,那么

and shipmentdate >= (sysdate-(5/1440))

其中 1440 = 24*60。

如果你想要最后 1 天,那么

and shipmentdate >= sysdate-1

希望你明白了..

请注意,只有当 shippingdate 是日期数据类型列时,所有这些才有效。否则查询会发生一点变化。


如果你想要一个时间框架,你也可以使用 between。

and shipmentdate between (sysdate-(10/24)) and (sysdate-(5/24))

如果您的发货日期可以有未来的记录,那么对于上述所有条件,请使用

and shipmentdate between sysdate-x and sysdate

【讨论】:

  • 假设以后不能发货,你只需要>= sysdate-(5/24)
  • 是的,你是对的。谢谢!我会调整我的答案。
  • 但是如果我有一个固定的时间,即如果我需要在 16:00 到 17:30 之间发货呢?
  • 试试这个 .. select trunc(sysdate)+16/24 , trunc(sysdate)+17.5/24 from dual.. 所以查询是 and shipmentdate between trunc(sysdate)+16/24 and trunc(sysdate)+17.5/24 today(system-date) .. Trunc(date) 将删除它的时间部分。
  • @PD1978US - 如果您不喜欢将小时数计算为一天的分数,您可以使用 SYSDATE + INTERVAL '17:30' HOUR TO MINUTE : oracle-base.com/articles/misc/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-18
  • 1970-01-01
相关资源
最近更新 更多