使用sysdate在一个时间范围内的Oracle SQL WHERE

时间:2014-02-26 19:55:59

标签: sql oracle date time where

我正在尝试选择前一天的数据,并且在一定的时间范围内,但我可能会错误地计算我的where子句。我试过切换时间等等。基本上我想看到所有数据从早上6点到下午6点,然后是晚上7点到凌晨3点,但我的结果并没有反映出来。我尝试过截断(sysdate)-1'00:00:00'< - 但指定时间,但我觉得我对这个功能不够熟悉。

注意:数据库是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;

结果:

enter image description here

看起来这看起来是正确的,但是当我改为查看其他时间范围时,它会告诉我这个......

第二次查询(夜间):

--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;

结果:

enter image description here

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

1 个答案:

答案 0 :(得分:2)

有效地,您要求当地时间上午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