"BETWEEN OPERATOR" IN ORACLE 未包含最后日期的数据

Data for the last date not included by the "BETWEEN OPERATOR" IN ORACLE

我有一个 oracle 查询,用于获取从日期 11/06/2021 到 16/06/2021 中午 2 点到凌晨 12 点(每天)之间的值。我在下面的查询将收集从 11 日到 15 日的信息,但不会获取 16 日的数据。还有其他方法可以解决这个问题吗?非常感谢您的宝贵时间

SELECT TO_CHAR(datadate, 'dd/mm/yyyy') , 
       ROUND(AVG(BATTERYVOLTAGE),2) AVGVOLTAGE  
FROM   MYTABLE 
WHERE  BATTERYVOLTAGE!= 0  
AND    to_char(datadate, 'hh24:mi:ss') BETWEEN '12:00:00' and '24:00:00'  
AND    DATADATE BETWEEN TO_DATE('11/06/2021', 'dd/mm/yyyy') 
                   AND  TO_DATE('16/06/2021', 'dd/mm/yyyy') 
GROUP BY TO_CHAR(datadate, 'dd/mm/yyyy') 
ORDER BY 1 
datadate BETWEEN to_date('11/06/2021', 'dd/mm/yyyy')
                 AND to_date('16/06/2021', 'dd/mm/yyyy')

仅包括 datadate 如果在 2021-06-16 00:00:00 之前或之时的行。不包括 2021-06-16 00:00:00 之后的所有内容。

这是一个常见的错误。不要对这些事情使用 BETWEEN。请改用 >=< 的范围。

    datadate >= to_date('2021-06-11 12:00:00', 'YYYY-MM-DD HH24:MI:SS')
AND datadate < to_date('2021-06-17 00:00:00', 'YYYY-MM-DD HH24:MI:SS')

您将有问题尝试将查询日期和时间分开;如果您加入日期和时间并搜索 to_date('2021-06-11 09:00:00','YYYY-MM-DD HH24:MI:SS') 之类的日期时间值,您将获得的范围从 9 开始会更容易限制你想要的

如果有人想知道怎么做。

更改最后日期的格式。

DATADATE BETWEEN TO_DATE('12/06/2021', 'dd/mm/yyyy') AND  (TO_DATE('22/06/2021', 'dd/mm/yyyy')+(1-1/24/60/60))

了解更多信息 https://asktom.oracle.com/pls/apex/asktom.search?tag=date-queries-using-between