Oracle 将 sysdate 向下舍入到可被 30 整除的最接近的分钟点
Oracle rounding down sysdate to the nearest minute point that divisible by 30
我必须通过向下舍入到可被 30 整除的最接近的分钟点来转换 sysdate。例如:
If sysdate is between 2020-10-14 09:00:00 and 2020-10-14 09:29:59 then return 2020-10-14 09:00:00
If sysdate is between 2020-10-14 09:30:00 and 2020-10-14 09:59:59 then return 2020-10-14 09:30:00
如何在 Oracle 中获得预期结果?
分钟逻辑在这里
- 获取会议记录
- 除以 30 并截断(得到 0 或 1)
- *30/1440 获得一天的 0 或 30 分钟
然后添加到一天中的小时
SQL> with d as
2 ( select to_date('09:27','HH:MI') x from dual
3 union all
4 select to_date('09:37','HH:MI') x from dual
5 )
6 select x, trunc(x,'HH') + 30*trunc(to_number(to_char(x,'MI'))/30)/1440
7 from d;
X TRUNC(X,'HH')+30*TR
------------------- -------------------
01/10/2020 09:27:00 01/10/2020 09:00:00
01/10/2020 09:37:00 01/10/2020 09:30:00
我必须通过向下舍入到可被 30 整除的最接近的分钟点来转换 sysdate。例如:
If sysdate is between 2020-10-14 09:00:00 and 2020-10-14 09:29:59 then return 2020-10-14 09:00:00
If sysdate is between 2020-10-14 09:30:00 and 2020-10-14 09:59:59 then return 2020-10-14 09:30:00
如何在 Oracle 中获得预期结果?
分钟逻辑在这里
- 获取会议记录
- 除以 30 并截断(得到 0 或 1)
- *30/1440 获得一天的 0 或 30 分钟
然后添加到一天中的小时
SQL> with d as
2 ( select to_date('09:27','HH:MI') x from dual
3 union all
4 select to_date('09:37','HH:MI') x from dual
5 )
6 select x, trunc(x,'HH') + 30*trunc(to_number(to_char(x,'MI'))/30)/1440
7 from d;
X TRUNC(X,'HH')+30*TR
------------------- -------------------
01/10/2020 09:27:00 01/10/2020 09:00:00
01/10/2020 09:37:00 01/10/2020 09:30:00