【发布时间】: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_dateorcurrent_timestampinstead ofsysdate会更容易混淆。或许也可以减少有关 DST 更改的问题。 -
啊,太好了!感谢您的提示,我使用了 current_date,但不太好知道!
标签: sql oracle date time where