Informix的时间与数值秒转换
sysmaster库中的sysptnhdr表中created字段是表的建立时间,其值是自1970-01-01 00:00:00 开始的秒数。
若我们需要获取表建立的时间,则需要进行转换,比如 to_date('1970-01-01 00:00:00','%Y-%m-%d %H:%M:%S') + created units second,但尝试执行这个时,会返回错误。
1263: A field in a datetime or interval value is incorrect or an illegal operation
specified on datetime field.
Error in line 1
Near character position 113
其中的返回错误表明,interval 的值存在问题,查出created的值为:1,340,483,148,这个原因明了:interval的值不能超过9位,而created的值现在为10位,超出了!!
那我们该将created的秒数转换成时间呢?需要使interval的值小于10位即可。
首先,获取到2000-01-01 00:00:00的秒数
select substr((to_date('2000-01-01 00:00:00','%Y-%m-%d %H:%M:%S') - to_date('1970-01-01 00:00:00','%Y-%m-%d %H:%M:%S')) * 24 * 3600,1,10)
from sysmaster:sysdual;
946684800
然后,使用 to_date('2000-01-01 00:00:00','%Y-%m-%d %H:%M:%S') + (created - 946684800) units second 即为created的时间了。
我们可以用个存储过程来实现这个功能(注:10亿秒约31.7年)。
CREATE FUNCTION intsec_time(intsec int)
RETURNING datetime year to second;
RETURN to_date('2000-01-01 00:00:00','%Y-%m-%d %H:%M:%S') + (intsec - 946684800) units second;
END FUNCTION;
然后再使用查询时,使用intsec_time可以容易的进行时间转换。
select first 1 created, intsec_time(created) from sysmaster:sysptnhdr;
created (expression)
1340483148 2012-06-23 20:25:48
1 row(s) retrieved.
评论:
informixer 2014-11-27 11:17
dbinfo('UTC_TO_DATETIME',ti.ti_created)
- 上一篇: Linux下OPENVPN的安装配置
- 下一篇: 分片表索引导致数据库空间满问题一例