2

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

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

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

4

2 回答 2

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
于 2013-01-16T23:48:14.577 回答
0

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

我现在手头没有 Informix 实例,但我怀疑该to_date()函数的使用会导致DATETIME数学运算。

我可以看到您已经提出了解决方案,但请尝试以下方法,这会简单:

SELECT today - TO_DATE('20121201', '%Y%m%d')::DATE AS td FROM tb_dis_controll
于 2013-01-15T12:20:21.093 回答