2009-05-01 61 views
0
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

回答

3

我不知道爲什麼你的數據沒有顯示,但DATEDIFF不會返回一個浮點數。爲了得到一個浮點數,你可能會想要使用更小的時間單位併除以每分鐘單位的數量。示例:

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

首先你得到了什麼結果剛剛從運行選擇?

2

DATEDIFF返回交叉的日期部分邊界的數量的整數。我希望你能夠獲得持續時間數量的底線,除非從Int到Float的隱式轉換有問題。

發佈收到的錯誤消息也很有幫助。

1

嘗試使用INSERT位自行運行SELECT,以檢查您的查詢是否實際返回了一些數據。

編輯:正如其他人所說,DATEDIFF返回一個int,而不是一個浮點數,但它不應該阻止INSERT插入一些數據。

0

在SQL Server則DateDiff返回一個int (See MSDN

0

DATEDIFF會返回一個int不是float - 就是這個問題,你遇到?

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值,從來沒有一小部分。