为什么INSERT和DATEDIFF语句不能正常工作?

为什么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是int,持续时间是浮动为什么INSERT和DATEDIFF语句不能正常工作?

我试图把所有的每小时持续时间为持续时间列...我认为即使是不到一个小时它会使用一小部分这就是为什么我放一个浮球?

帮助。

PS:它运行良好没有错误,但它的完成后的间隔表仍是空的......我知道这个数据是在表TimeInterval所虽然...

+0

当你运行它时会发生什么?什么不工作? – codeulike 2009-05-01 16:14:14

+0

好吧,它运行良好,但间隔表保持空 – BigOmega 2009-05-01 16:15:40

我不知道为什么你的数据没有显示,但DATEDIFF不会返回一个浮点数。为了得到一个浮点数,你可能会想要使用更小的时间单位并除以每分钟单位的数量。示例:

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

首先你得到了什么结果刚刚从运行选择?

DATEDIFF返回交叉的日期部分边界的数量的整数。我希望你能够获得持续时间数量的底线,除非从Int到Float的隐式转换有问题。

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

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

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

在SQL Server则DateDiff返回一个int (See MSDN

DATEDIFF会返回一个int不是float - 就是这个问题,你遇到?

要插入一个小时的实际分数,使用方法:

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值,从来没有一小部分。