回答

收藏

日期间隔10分钟

技术问答 技术问答 206 人阅读 | 0 人回复 | 2023-09-14

我有一DATE列要四舍五入到查询中下一个较低的10分钟间隔(请参见以下示例)。0 t4 F  A# L" h( h: C
我试着切断秒数,然后减去分钟的最后一个。
) F; L$ s/ y; vWITH test_data AS (       SELECT TO_DATE('2010-01-YYYY-MM-DD HH24:MI:SS') d FROM dual  UNION SELECT TO_DATE('2010-01-YYYY-MM-DD HH24:MI:SS') d FROM dual  UNION SELECT TO_DATE('2010-01-YYYY-MM-DD HH24:MI:SS') d FROM dual  UNION SELECT TO_DATE('2010-01-YYYY-MM-DD HH24:MI:SS') d FROM dual  UNION SELECT TO_DATE('2099-01-YYYY-MM-DD HH24:MI:SS') d FROM dual)-- #end of test-dataSELECT  d,TRUNC(d,'MI') - MOD(TO_CHAR(d,'MI'),10) / (24 * 60)FROM test_data结果如下:$ n- T2 d3 J9 G1 W; D
01.01.2010 10: 00:00    听听01.01.2010 10: 00:00
, S" F) ?: P& Y! e/ T/ `' t    01.01.2010 10: 05:00    听听01.01.2010 10: 00:00
; _+ ~0 y* z, U+ p) _# A8 m" Q    01.01.2010 10: 9时59    听听01.01.2010 10 : 00:00" l3 r: o! ]7 L# n5 e
    01.01.2010 10: 10:00    听听01.01.2010 10: 10:00. n. [5 y& ]  c/ _
    2099年1月1日10:0点33    听2099年1月1日10:0000:00. x$ A1 `& r  a. R) j
能正常工作,但是有更好的方法吗?
+ S9 @  E! y) u6 N- ?9 |8 e+ J3 ^编辑    :
! C& j1 F0 G) [) w+ X我对性能很好奇,所以我对5000很好奇.000行和(不是真的)随机日期进行了以下测试。我将结果添加到解决方案中。
9 b4 I, F* ?6 {! o) B! B6 S( i3 ADECLARE  t       TIMESTAMP := SYSTIMESTAMP;BEGIN  FOR i IN  WITH test_data AS    SELECT SYSDATE   ROWNUM / 5000 d FROM dual      CONNECT BY ROWNUM 采用03的方法.24 s。
0 I% i3 _+ h3 I                                                                4 z' |5 t5 x  d2 W1 \
    解决方案:                                                               
. h+ ~; M5 [( _9 {- _                                                                select  trunc(sysdate,'mi')  - numtodsinterval(mod(EXTRACT(minute FROM cast(sysdate as timestamp)),10),'minute')from dual;甚至$ C2 S7 S7 m- y: q! q1 s3 a
select  trunc(sysdate,'mi')  - mod(EXTRACT(minute FROM cast(sysdate as timestamp)), / (24 )* 60)from dual;
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则