我正在使用Informix数据库。我想获得两个日期之间的差异,返回值的数据类型必须是整数。 SQL看起来像:
select (today - to_date('20121201','%Y%m%d')) from your_table_name
但是,当我执行SQL时,它返回45,当然计算的值不是整数类型。 该值的日期类型是什么?如何将值转换为整数?
答案 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