【问题标题】:How can I return data with a timestamp and how to filter it?如何返回带有时间戳的数据以及如何过滤它?
【发布时间】:2022-02-07 22:58:40
【问题描述】:

我对 SQL 完全陌生,而且我很挣扎。我需要从下面提到的日期运行查询,并将时间戳数据拆分为轮班时间 6-13:59、14-21:59 和 22 - 05:59。我需要看看在这几个小时之间发送了多少货物。我想出了类似的方法,但它似乎不起作用。

当我输入不带时间戳的日期时,数据会返回,但我只想返回那些在 6 到 14 之间发送的行。SDG 表包含时间戳,所以我不明白为什么不工作。

select s1.date, k.su, count(distinct s1.nr) AMO_SHIP2021
from sdg s1 , client k
where s1.clientnr in ('1')
and s1.date between '01.12.2021 06:00:00' and '14.12.2021 13:59:59'
and s1.function in ('20')
and k.nr = s1.clientnr
group by s1.date, k.su, s1.function

【问题讨论】:

  • 请使用现代连接语法而不是 1980 年代的旧 SQL。

标签: sql oracle date timestamp


【解决方案1】:

您应该在此处发布表格结构。通常,如果您的列是 Date 类型,您需要使用 BETWEEN 使用日期而不是字符串来操作日期

s1.date BETWEEN to_date('01.12.2021 06:00:00', 'DD.MM.YYYY HH24:MI:SS') AND
to_date('14.12.2021 13:59:59', 'DD.MM.YYYY HH24:MI:SS')

在您的搜索中参考 FORMAT MODEL。

to_date('string date', 'format model')

【讨论】:

  • 不幸的是,不完全一样,因为它会返回 ORA-01849 错误。如果您使用 HH 格式掩码,那么您必须指定 AM/PM,否则 Oracle 无法判断您要做什么。您的第一个“日期”是可以的(它代表上午 06:00,但 13:59 是错误 - 根据您使用的格式掩码 - 小时必须在 1 到 12 之间(而 13 不是真的在这两者之间)。
  • 非常感谢,这对我有帮助!是否可以返回从 01.12.2021 到 14.12.2021 的每个日期的这些小时之间的时间戳?如果我放在运算符之间,我将得到这些日期之间的所有时间戳,对,因为时间戳介于两者之间。如何在没有更高时间戳的情况下返回每个日期从 06:00:00 到 13:59:59 的时间戳?
  • @Littlefoot 谢谢。我添加了HH24,因为OP 有类似13:59:59
  • @vegandu 我想你问了一些你不想做的事情。如果您正在寻找特定的时间戳,您可以使用 s1.date IN (to_date('14.12.2021 13:59:59', 'DD.MM.YYYY HH24:MI:SS'), to_date('01.12.2021 06:00:00', 'DD.MM.YYYY HH24:MI:SS'))
  • @T.S 好的,非常感谢!
猜你喜欢
  • 1970-01-01
  • 2023-04-09
  • 2018-07-17
  • 1970-01-01
  • 2021-01-02
  • 1970-01-01
  • 2017-05-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多