Chinaunix首页 | 论坛 | 博客
  • 博客访问: 103683147
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类: DB2/Informix

2008-03-24 21:14:42


informix数据库中的时间运算
 
今天看SUN服务器是的mail(vi   /var/mail/xxxuser),发现定时任务上的一些存储过程执行有错误,其中有一个错误是long transaction,长事务错误,到数据库一查,天哪,一天就十几万条记录,我写的存储过程时间上只是精确到月,一个月的数据一次删除,还好数据库没罢工,之前定义到月是因为informix中日期字段不能直接减去天数做运算,这种态度不可取~~~,只好重写存储过程,时间精确到天,下面是具体的informix时间运算。ORACLE的时间字段可以直接减去(加上)天数运算(select  sysdate-365  from  dual;)。
 
下面的语句中extend用来限制到年、月、日,interval是说明间隔数
 
减去(加上)天数,interval最多取两位

从time_stamp字段减去两天时间
select extend(time_stamp-interval(2) day to day) from users;

从当前时间减去两天
select extend(current-interval(2) day to day) from users;
 
 
减去(加上)月数,interval最多取两位

从time_stamp字段减去两个月
select extend(time_stamp-interval(2) month to month) from users;
从当前时间减去两个月
select extend(current-interval(2) month to month) from users;
 
减去(加上)年数,interval最多取四位
从time_stamp字段减去两个年
select extend(time_stamp-interval(2) year to year) from users;
从当前时间减去两年
select extend(current-interval(2) year to year) from users;
 
试了一下,上面的写法会显示到毫秒,如
2004-09-11 17:24:03.000 
2004-09-11 17:24:03.000 
2004-09-11 17:24:03.000 
 
可以再加个extend限制,如下
显示到月
select extend(((extend(current-interval(2) day to day))),year to month) from users;
显示到天
select extend(((extend(current-interval(2) month to month))),year to day) from users;
显示到秒
select extend(((extend(current-interval(2) year to year))),year to second) from users;
 
 
 
上面讲的是其中一种方法,今天又学到一种,可以用units关键字。
 
 
--年
select current-5 units year from users
 
--月
select current-5 units month from users
 
--日
select current-5 units day from users
 
--时
select current-5 units hour from users
 
--分
select current-5 units minute from users
 
--秒
select current-5 units second from users

阅读(825) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~