oracle记录:Oracle 没有内置的方式来记录时间的流逝



  在以前版本中Oracle时间计量单位是厘秒使用厘秒最显而易见问题就是可能有些操作是小于厘秒看上去这似乎不太常见但是实际上在操作系统上很多操作都是以微妙作为单位这意味着操作起始和终止在不到厘秒就完成了从厘秒级看就好像没有发生持续时间近似为0而有时候操作持续时间不到厘秒但是起始和终止发生在两个相连厘秒所以操作时间不到厘秒但是却被记录为厘秒造成时间记录不准确Oracle 没有内置方式来记录时间流逝DATE型数据用来记录单独时间点;但是要表达个时间量(也就是个间隔)数据库设计者就必须把时间间隔转换成原始单位秒然后用个NUMBER列来保存它

  虽然NUMBER这个数据类型可以以秒为单位准确地表示时间但是它使得时间计算变得很困难比如60秒是1分钟60分钟是1个小时24个小时等于1天——这些数字在以十进制为基础数字系统中都是非常不实用

  在Oracle中按照SQL 99标准增加了时间间隔型数据INTERVAL YEAR TO MONTH 和 INTERVAL DAY TO SECOND它们和其他几种数据类型起使得对时间处理更加准确TIMESTAMP、TIMESTAMP WITH TIME ZONE和TIMESTAMP WITH LOCAL TIME ZONE等数据类型都把时间表达精确到了若干分的而且后面两种还解决了地理位置造成时间变化

  Sql语句等待时间等于ELAPSED_TIME减去CPU_TIME但是很难看到精确等待时间在V$SYSTEM_EVENT 视图中能够看到数据库例子级等待时间(并不是每条Sql语句)但是看不到发生在操作系统上等待时间

  在SQL和PL/SQL中你都可以用时间间隔型数据它们都是用同种方式规定:  

INTERVAL YEAR[(year_precision)] TO MONTH
  INTERVAL DAY[(day_precision)] TO SECOND[(fractional_seconds_precision)]


  转换和date操作关系最大就是两个转换:to_date,to_char

  to_date 作用将类型按定格式转化为日期类型:

  具体使用方法:to_date('2008-11-27','yyyy-mm-dd'),前者为后者为转换日期格式注意前后两者要以对应

  如;to_date('2008-11-27 13:34:43', 'yyyy-mm-dd hh24:mi:ss') 将得到具体时间

  对于精确数值规定有缺省值:年和日是两位数若干分的秒是 6位数

  时间间隔大小由INTERVAL来表示后面紧接个放在单引号中表达式以及用来解释该表达式文字用YEAR TO MONTH表示时间间隔大小时要在年和月的间用个连(-) 连接而DAY TO SECOND表示时间间隔大小时要在日和时间的间用个空格连接例子如下:

  返回当前时间 年月日小时分秒毫秒


select to_char(current_timestamp(5),'DD-MON-YYYY HH24:MI:SSxFF') from dual;


  返回当前 时间秒毫秒可以指定秒后面精度(最大=9) 

select to_char(current_timestamp(9),'MI:SSxFF') from dual;


  实现最大值和当前时间比较

  通过对记录中最大时间加上指定月份得到范围上限并用CURRENT_DATE获取当前系统时间和的比较如果超出该上限则判断为不存在表示为0否则表示为1

 SQL:
  SELECT COUNT(*) contains
  FROM DUAL t
  WHERE CURRENT_DATE < (SELECT (ADD_MONTHS(MAX(t.med_time),14))
  FROM red_meettingrecord t
  WHERE t.med_tar_id = '225'
  AND t.med_usr_id = '001387')


  通过对记录中最大时间加上指定月份得到范围上限并用CURRENT_DATE获取当前系统时间和的比较如果超出该上限则判断为不存在表示为0否则表示为1
Tags:  oracle记录

延伸阅读

最新评论

发表评论