Oracle查询将时间舍入到15分钟窗口下限

moiiocjp  于 2022-11-03  发布在  Oracle
关注(0)|答案(3)|浏览(202)

我有一个查询,它将时间四舍五入到最近的15分钟窗口:

Select     Sysdate,
           Trunc (Sysdate) + ( Round ( (Sysdate - Trunc (Sysdate))* 96)/ 96)
FROM       dual;

但是,我不想要最近的,而是较低的15分钟窗口。
例如1:
时间19:57:03
以上查询输出20:00:00
所需输出19:45:00
例如2:
时间17:18:00
以上查询输出17:15:00
所需输出17:15:00
第二个例子是正确的,但是第一个例子舍入到20:00作为它的较近点。

mjqavswn

mjqavswn1#

你可以使用FloorCeil概念。

Select     Sysdate,
           Trunc (Sysdate) + ( Round (floor(Sysdate - Trunc (Sysdate))* 96)/ 96)
FROM       dual;

如需参考,请访问Here

8ulbf1ek

8ulbf1ek2#

ROUND函数之后只需要一个FLOOR函数-

Select SYSDATE,
       TRUNC(SYSDATE) + (ROUND(FLOOR((SYSDATE - TRUNC (SYSDATE))* 96))/ 96)
FROM DUAL;

Here是小提琴。

svmlkihl

svmlkihl3#

接受的答案没有为我给予正确的解决方案,因为舍入的默认精度是0,计算结果舍入为0。
要获得较低的15分钟窗口,需要使用地板,而不是同时使用圆形和地板。
对我有效的代码是

SELECT SYSDATE, TRUNC(SYSDATE) + FLOOR((SYSDATE - TRUNC(SYSDATE))*96) / 96 AS time_lower_15_min
, TRUNC(SYSDATE) + ROUND((SYSDATE - TRUNC(SYSDATE))*96) / 96 AS time_15_min
FROM dual

相关问题