我想导出下面查询的数据。
SELECT id, number, dat1, dat2, (dat1 - dat2)::INTERVAL SECOND(9) TO SECOND::VARCHAR(10)::INTEGER AS dat1_dat2
FROM informix.table_
WHERE departement=='NY'
AND dat1 >='2021-03-01 00:00:00'
AND dat1 <'2021-08-01 00:00:00'
AND ((dat1 - dat2)::INTERVAL SECOND(9) TO SECOND::VARCHAR(10)::INTEGER > -60
AND (dat1 - dat2)::INTERVAL SECOND(9) TO SECOND::VARCHAR(10)::INTEGER<60)
AND ((dat2 - dat1)::INTERVAL SECOND(9) TO SECOND::VARCHAR(10)::INTEGER > -60
AND (dat2 - dat1)::INTERVAL SECOND(9) TO SECOND::VARCHAR(10)::INTEGER<60)
我得到下面的错误。有谁知道为什么我不能导出我的数据吗?
任务执行失败
主题:SQL错误[IX000]:溢出发生在一个datetime或间隔操作。
我不是Informix用户,但是作为一名开发人员,我可以告诉您,当操作的结果太大而无法装入某个数据类型时,就会发生溢出错误。作为一种探索,(dat1 - dat2)::INTERVAL SECOND(9) TO SECOND::VARCHAR(10)::INTEGER
操作的结果是否对于INTEGER
来说太大了?快速的Google搜索似乎显示,Informix中INTEGER
的最大值是2,147,483,647
—dat1
和dat2
之间的秒数是否可能大于这个值(大于68年)?
所以我不能确切地告诉你你的查询是失败的,因为我看不到数据,但我可以告诉你,你的一个操作的结果是一个非常大的数字,不适合INTEGER
,它是-2,147,483,647到2,147,483,647。
在您的查询中,以下任何一个都可能是罪魁祸首:
(dat1 - dat2)::INTERVAL SECOND(9) TO SECOND::VARCHAR(10)::INTEGER
(dat2 - dat1)::INTERVAL SECOND(9) TO SECOND::VARCHAR(10)::INTEGER