【问题标题】:SQL how to perform calculations on float time and string time?SQL如何对浮点时间和字符串时间进行计算?
【发布时间】:2012-07-08 14:04:01
【问题描述】:

您好,我在 DB2 中有表:

ID       TIME1        TIME2       
1000     480.5        30:30:00

我想得到TIME1-TIME2

ID       TIME1-TIME2 
1000       450.0 

TIME1 是以 HOURS 为单位的十进制值,即 480.5 小时。 TIME2 是字符串值:30:30:00(30 小时 30 分 00 秒)

如何得到这个减法?

谢谢!

【问题讨论】:

  • ... 以两种不同的数据类型存储区间数据是很糟糕的。实际上,这将是创建一些用户定义类型的完美案例,这将为您提供很好的类型安全性,并且可能允许您“正常”地在日期算术中使用它们。
  • 这是来自我的客户数据库,我对此无能为力或更改他们数据库中的类型,所以这绝对不是解决方案

标签: sql db2 subtraction


【解决方案1】:

您之前需要将两个字段(字符串和小数字段)转换为 INTERVAL 数据类型,然后执行减法运算。看看this article,它解释了如何在 DB2 中处理间隔。

使用您将在该文章中找到的功能,您可以通过这种方式安排解决方案,例如:

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

【讨论】:

  • 感谢您的回复,但功能很多。不确定要使用哪个,我必须在两个领域都这样做吗?你能给我写个例子吗?谢谢,问候
  • 看看我发布的示例,即使我没有尝试过也应该可以工作......
  • 感谢您的努力。我在 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 )
猜你喜欢
  • 1970-01-01
  • 2020-12-29
  • 1970-01-01
  • 2011-03-07
  • 1970-01-01
  • 2014-09-22
  • 1970-01-01
  • 2014-09-05
  • 1970-01-01
相关资源
最近更新 更多