暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 时间戳数据类型的使用

ASKTOM 2020-04-23
645

问题描述

你好,问一下汤姆团队。

我在一些表中有三个日期列。我被要求做一些数学运算,并以毫秒为单位显示它。我需要将日期数据类型更改为时间戳,也许是时间戳 (3)。

这是我的查询:

选择计数 (*) QTY_DOCS,
ROUND(MIN((register_date-received_date)* 24*60*1000),2) MIN_MS_REG,
ROUND (平均值 ((register_date-received_date)* 24*60*1000),2) AVG_MS_REG,
圆形 (最大 ((register_date-received_date)* 24*60*1000),2) 最大ms_reg,
回合 (最小 ((updated_date-register_date)* 24*60*1000),2) 最小 _ ms_update_state,
回合 (平均 ((updated_date-register_date)* 24*60*1000),2) 平均数字 _ ms_update_state,
回合 (最大 ((updated_date-register_date)* 24*60*1000),2) 最大更新状态
从用户。表t
其中t.register_date >= TO_DATE (:FIRSTDATE,'DD/MM/RRRR')
和t.register_date
1.从日期更改为时间戳数据类型将如何影响性能 (register_date上的索引,...)。时间戳上的索引是否不同或只是普通索引,我可以继续使用TO_DATE函数?

2.关于这一切,我还需要记住什么?

专家解答

需要注意的一些事项:

业绩不会受到影响。您可以像日期列一样索引时间戳列。

时间戳将使用更多的空间,但它不太可能你会注意到,除非你进入数十亿行。

尽量不要做任何隐式日期转换。所以确保你的谓词是:

WHERE t.register_date >= TO_TIMESTAMP (:FIRSTDATE,'DD/MM/RRRR')


减去两个时间戳不会给出数字,而是给出一个间隔,因此您需要调整代码,例如

SQL> select systimestamp - (systimestamp-.123) from dual;

SYSTIMESTAMP-(SYSTIMESTAMP-.123)
----------------------------------------------------------
+000000000 02:57:07.392000


为了得到零碎的东西,你使用提取,例如

SQL> with t as (
  2    select systimestamp - (systimestamp-.123) x from dual
  3  )
  4  select
  5    extract(day from x),
  6    extract(hour from x),
  7    extract(minute from x),
  8    extract(second from x)
  9  from t;

EXTRACT(DAYFROMX) EXTRACT(HOURFROMX) EXTRACT(MINUTEFROMX) EXTRACT(SECONDFROMX)
----------------- ------------------ -------------------- --------------------
                0                  2                   57                7.304

1 row selected.




文章转载自ASKTOM,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论