【问题标题】:Oracle SQL WHERE within a time range using sysdate使用 sysdate 在时间范围内的 Oracle SQL WHERE
【发布时间】:2014-03-29 21:38:48
【问题描述】:

我正在尝试在特定时间范围内选择前一天的数据,但我可能会错误地计算我的 where 子句。我已经尝试过切换时间等。基本上我想查看早上 6 点到下午 6 点,然后是晚上 7 点到 3 点的所有数据,但我的结果并没有反映出这一点。我在 trunc(sysdate)-1 '00:00:00'

注意:DB 是 UTC,因此是 8/24。

查询:

--TOTAL PROBLEM STOW EVENTS
SELECT to_char(entry_date -8/24, 'DD-MON-YYYY HH12:MI:SSam'), OLD_BIN_ID old_bin, NEW_BIN_ID NEW_BIN, ISBN ASIN, QUANTITY 
FROM BINEDIT_ENTRIES
WHERE ENTRY_DATE BETWEEN trunc(SYSDATE) -1 +4/24 AND trunc(SYSDATE) -1 +16/24
--where entry_date BETWEEN trunc(sysdate)-1 '00:00:00' AND trunc(sysdate)-1 '00:00:00.000'
AND substr(old_bin_id,1,2) = 'SC'
AND substr(new_bin_id,1,2) = 'vt'
GROUP BY ENTRY_DATE, OLD_BIN_ID, NEW_BIN_ID, ISBN, Quantity
ORDER BY QUANTITY DESC;

结果:

这看起来是正确的,但是当我更改为查看其他时间范围时,它向我显示了这个..

第二次查询(夜间):

--TOTAL PROBLEM STOW EVENTS
SELECT to_char(entry_date -8/24, 'DD-MON-YYYY HH12:MI:SSam'), OLD_BIN_ID old_bin, NEW_BIN_ID NEW_BIN, ISBN ASIN, QUANTITY 
FROM BINEDIT_ENTRIES
WHERE ENTRY_DATE BETWEEN trunc(SYSDATE) -1 +16/24 AND trunc(SYSDATE) -1 +24/24
--where entry_date BETWEEN trunc(sysdate)-1 '00:00:00' AND trunc(sysdate)-1 '00:00:00.000'
AND substr(old_bin_id,1,2) = 'SC'
AND substr(new_bin_id,1,2) = 'vt'
GROUP BY ENTRY_DATE, OLD_BIN_ID, NEW_BIN_ID, ISBN, Quantity
ORDER BY QUANTITY DESC;

结果:

您可以看到它似乎没有查看 where 子句,我相信我的格式不正确,我通常只查看昨天的整体,而不是时间范围,所以这是我第一次尝试这样做。谢谢。

【问题讨论】:

  • entry_date 是什么数据类型?除非是TIMESTAMP WITH TIME ZONE 我不知道你为什么需要调整?
  • 它是带时区的时间戳:/ 我想通了,不过谢谢!
  • 好的,好的 8-) 但是如果您的会话与您正在查询的数据位于同一时区,您可能会发现使用current_date or current_timestamp instead of sysdate 会更容易混淆。或许也可以减少有关 DST 更改的问题。
  • 啊,太好了!感谢您的提示,我使用了 current_date,但不太好知道!

标签: sql oracle date time where


【解决方案1】:

实际上,您要求的是当地时间上午 8 点到下午 4 点之间的所有内容。我说早上 8 点,因为您在 WHERE 子句中增加了 16 小时,在 SELECT 子句中减去了 8 小时。

如果您打算在当地时间晚上 7 点到凌晨 3 点之间进行查询,您只需在 WHERE 子句中添加 8 小时:

WHERE ENTRY_DATE BETWEEN 
                   trunc(SYSDATE) -1 +19/24 + 8/24
               AND trunc(SYSDATE) -1 +27/24 + 8/24

【讨论】:

  • 第一个查询看起来不错,但是当我运行第二个查询时,我从第一个查询指定的时间范围内获取条目。嗯,我只是试图将所有内容加载为 PST。我可能会用奇怪的 where 子句歪曲结果。
  • 对您的更新答案的回复:Effectivley 我正在寻找当地时间上午 6 点至下午 6 点。第二个查询,晚上 7 点 - 凌晨 3 点。
  • 去试试你的答案。
  • 不,我认为你的时间数学刚刚结束。这是可以理解的,因为我在写答案时两次关闭:)
  • 那就是18.5/24
猜你喜欢
  • 1970-01-01
  • 2021-10-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-16
  • 1970-01-01
  • 2021-04-20
相关资源
最近更新 更多