如何计算Informix中返回值类型为整数的两个日期之间的差异?

时间:2013-01-15 04:44:45

标签: date informix

我正在使用Informix数据库。我想获得两个日期之间的差异,返回值的数据类型必须是整数。 SQL看起来像:

select (today - to_date('20121201','%Y%m%d'))  from your_table_name

但是,当我执行SQL时,它返回45,当然计算的值不是整数类型。 该值的日期类型是什么?如何将值转换为整数?

2 个答案:

答案 0 :(得分:1)

TO_DATE函数是Oracle导入,并在Oracle中返回Oracle DATE类型(因此名称),但Oracle DATE类型对应于Informix DATETIME类型。因此,TO_DATE()函数的Informix实现返回DATETIME类型。

问题

SELECT TODAY AS TODAY,
       TO_DATE('20121201', '%Y%m%d') AS raw_to_date,
       (TODAY - TO_DATE('20121201','%Y%m%d')) AS raw_difference
  FROM sysmaster:informix.sysdual;

today       raw_to_date                   raw_difference
DATE        DATETIME YEAR TO FRACTION(5)  INTERVAL DAY(8) TO DAY
2013-01-16  2012-12-01 00:00:00.00000     46

解决方案

表达式的解决方案是将DATE函数应用于TO_DATE的输出,或将其强制转换为DATE类型。

SELECT DATE(TO_DATE('20121201', '%Y%m%d'))          AS date_to_date,
       CAST(TO_DATE('20121201', '%Y%m%d') AS DATE)  AS cast_to_date,
            TO_DATE('20121201', '%Y%m%d')::DATE     AS colon_to_date,
       (TODAY - DATE(TO_DATE('20121201','%Y%m%d'))) AS date_difference
  FROM sysmaster:informix.sysdual;

date_to_date  cast_to_date  colon_to_date  date_difference
DATE          DATE          DATE           INTEGER
2012-12-01    2012-12-01    2012-12-01     46

答案 1 :(得分:0)

两个日期之间的差异应该是整数。在计算INTERVAL值之间的差异时,您应该只获得DATETIME

我现在没有方便的Informix实例,但我怀疑使用to_date()函数导致DATETIME数学。

我可以看到你提出了一个解决方案,但尝试以下方法,这将是 lot 更简单:

SELECT today - TO_DATE('20121201', '%Y%m%d')::DATE AS td FROM tb_dis_controll