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



我正在使用一个Informix数据库。我想要得到两个日期之间的差值,并且返回值的数据类型必须是整数。SQL语句如下:

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

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

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

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

我现在手边没有Informix实例,但是我怀疑使用to_date()函数会导致DATETIME math。

我知道你已经想出了一个解决方案,但请尝试以下方法,这将比更简单:

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

最新更新