SQL如何在float time和string time上执行计算?

问题描述:

您好我有表在DB2:SQL如何在float time和string time上执行计算?

ID  TIME1  TIME2  
1000  480.5  30:30:00 

我想TIME1,TIME2

ID  TIME1-TIME2 
1000  450.0 

TIME1是十进制值在小时 - 如此480.5小时。 TIME2是字符串值:30:30:00(30小时30分00秒)

如何得到这种减法?

谢谢!

+0

...两个_different_数据类型存储间隔数据是可怕的。实际上,这将是创建一些用户定义类型的完美例子,这会为您提供很好的类型安全性,并可能允许您在“正常”日期算法中使用它们。 – 2012-07-09 16:16:44

+0

这是从我的客户数据库,我不能做任何事情或改变他们的数据库中的类型,所以这绝对不是一个解决方案 – Dejan 2012-07-10 08:57:11

您有两个字段(字符串和小数字段)转换为INTERVAL数据类型,然后执行减法操作。看看this article,它解释了如何处理DB2中的时间间隔。

使用功能,您将在本文中找到可以安排例如在这样的解决方案:

SELECT ID, 
NUMTODSINTERVAL(TIME1, 'SECOND') - TO_DSINTERVAL('0 ' || TIME2) AS TIME1-TIME2 
FROM table 
+0

感谢您的回应,但有许多功能。不确定要使用哪一个,我必须在两个字段上都这样做?你能写一个例子吗?谢谢,问候 – Dejan 2012-07-08 14:17:26

+0

看看我已发布的示例应该工作,即使我没有尝试过... – aleroot 2012-07-08 14:25:18

+0

感谢您的努力。我在NUMTODSINTERVAL函数得到错误我希望这不是我得到TIME1的问题用这个表达式(dec((timestampdiff( 4, char(t1.actualfinish -t1.reportdate))/ 60.00),10,2))和TIME2来自某个其他表T2。我成功地加入了我的工作。因此,表达式将是NUMTODSINTERVAL((dec((timestampdiff( 4, char(t1.actualfinish -t1.reportdate))/ 60.00),10,2)),'SECOND') - TO_DSINTERVAL('0'|| T2 .TIME2) – Dejan 2012-07-08 14:56:53