【发布时间】:2021-10-01 14:41:11
【问题描述】:
我有一张时间表。在这里面我有一个专栏arrival_time 这是一个decimal
以下是一些示例值:
| arrival_time |
|---|
| 6.23 |
| 6.58 |
| 5.51 |
所以6.23 是 6 小时 23 分钟。
我想将sum 的值设为time 而不是decimal
所以我尝试了这个
datediff(hour,min(cast(arrival_time as time)),max(cast(arrival_time as time))),
我得到了这个错误
Explicit conversion from data type decimal to time is not allowed.
我没有找到如何转换类型然后对值求和。
我做错了什么?
【问题讨论】:
-
假设 6.23 小时是 6 小时 13.8 分钟。 6.85是几点?为什么不使用
time数据类型存储时间? -
如果那是 SQL Server,那就没有意义了。
time表示一天中的时间。将一天中的两次加在一起是没有意义的(因此不支持)。你需要一个代表时间span的东西,最明智的存储方式通常是一个整数,计算你想要使用的最小单位(例如分钟),然后自然支持加法。跨度> -
对不起。我添加了 RDBMS。 @Stu 因为我从软件中获取了这些数据,但我无法更改数据库结构。
-
人们有时将时间存储为小数,但它是 十进制,即
6.25是 6 点后 15 分钟,6.50是 6 点后 30 分钟. 这种格式特别奇怪,提示输入'6.25'的varchar 而不是小数。那么,separate the fraction 并声明它为分钟,并将所有这些添加到零日期。 -
@LouisChopard - 如果时间总和大于 24 小时,你想要什么格式?
标签: sql sql-server