为什么这个INSERT与DATEDIFF语句不正常?

时间:2009-05-01 16:12:10

标签: sql insert datediff

INSERT INTO timecrunch.dbo.intervals (IntervalID, Duration) 
SELECT ixInterval, DATEDIFF(hour, dtStart, dtEnd) FROM fogbugz.dbo.TimeInterval
WHERE dtEnd is not NULL

IntervalID是一个i​​nt,Duration是一个浮点数

我试图将所有小时持续时间放入持续时间列...我假设即使它不到一个小时它会使用一个分数,这就是为什么我放一个浮点数?

帮助。

PS:它运行正常没有错误,但在完成后,interval表仍然是空的...我知道数据在TimeInterval表中虽然...

7 个答案:

答案 0 :(得分:3)

我不确定为什么你的数据没有显示,但是DATEDIFF不会返回浮点数。要获得浮动,您可能希望使用较小的时间单位除以每分钟的单位数。例如:

DATEDIFF(second, dtStart, dtEnd) / (3600.0)

答案 1 :(得分:2)

DATEDIFF返回跨越日期部分边界数的Int。除非存在从Int到Float的隐式转换的问题,否则我希望你能得到持续时间的最小值。

发布收到的错误消息也很有帮助。

答案 2 :(得分:2)

要插入一小时的实际分数,请使用:

INSERT INTO timecrunch.dbo.intervals (IntervalID, Duration) 
SELECT 
  ixInterval, 
  DATEDIFF(mi, dtStart, dtEnd) / 60.0
FROM 
  fogbugz.dbo.TimeInterval
WHERE 
  dtEnd is not NULL

DATEDIFF总是返回一个INT值,绝不是一个分数。

答案 3 :(得分:1)

尝试使用INSERT位自行运行SELECT,以检查您的查询是否实际返回了一些数据。

编辑:正如其他人所说,DATEDIFF返回一个int,而不是一个浮点数,但这不应该阻止INSERT插入一些数据。

答案 4 :(得分:0)

首先,您从运行select?

得到什么结果?

答案 5 :(得分:0)

在Sql Server中,DateDiff返回一个int (See MSDN

答案 6 :(得分:0)

DATEDIFF会返回一个int而不是一个浮点数 - 这是你遇到的问题吗?