【发布时间】:2016-10-06 07:19:36
【问题描述】:
我有一列时间记录表示两个日期之间的差异。其中一些记录超过 24 小时。
由于时间语法不考虑 > 24 小时的时间记录,我不得不将这些记录转换为 varchar hh:mm:ss,如下面链接中的解决方案所述:
SQL date format [h]:mm:ss like Excel does, beyond 24 hr
这很好用,但我的问题是我现在需要将它们转换为浮点数(例如 69:00:00.0000 为 2.875)。
很遗憾,我不能使用通常建议的 datediff 来执行此操作,因为它会为超过 24 小时的记录引发“超出范围”错误。
关于如何克服这个问题的任何想法?
【问题讨论】:
-
I've had to convert these records to varchar...我认为永远将数字数据存储为varchar不是一个好主意。有没有机会在几秒钟内存储差异? -
只需将持续时间存储为一个数字,存储经过的秒/分钟/天/年,任何适合您需要的测量单位(即我不会以秒为单位测量地质年龄,我也不会测量100M 冲刺数小时)。如果您需要使用 hh:mm:ss 格式以小时、分钟和秒为单位显示此数字,那么这是表示层的工作。将其存储为字符串,因为最终您想以某种方式显示它是一个非常糟糕的主意。
-
另一种选择是存储您的开始日期和时间以及结束日期和时间,然后您可以使用
DATEDIFF轻松计算出您喜欢的任何单位的持续时间。相关阅读见Bad habits to kick : choosing the wrong data type -
由于您是新来的(顺便说一句:欢迎!),请给我一个提示:您在(最佳)答案的投票计数器下方勾选接受检查,真是太好了。这将 1) 将此问题标记为已解决 2) 让追随者更容易找到最佳解决方案 3) 向回答者支付积分和 4) 向您支付积分。由于您自己已经越过了 15 点边界,因此您还被要求对贡献进行投票。这是说谢谢的方式。编码快乐!
标签: sql sql-server datetime sql-date-functions sqldatetime