2009-05-01 3 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

+0

хорошо работает, но таблица интервалов остается пустой – BigOmega

+5

выглядит нормально для меня. Получаете ли вы результаты, если вы запустите SELECT без бита INSERT INTO? – codeulike

ответ

3

Я не уверен, почему ваши данные не отображаются, но DATEDIFF не вернет поплавок. Чтобы получить поплавок, вы, вероятно, захотите использовать меньшую единицу времени и делить на количество единиц в минуту. Пример:

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

Хорошее решение для поведения, которое ожидает оригинальный плакат. – Joe

0

Во-первых, какие результаты вы получите только от запустить выбор?

2

DATEDIFF возвращает Int из числа пересекаемых границ стороны даты. Я ожидаю, что вы получите пол от количества часов, если не будет проблемы с неявным преобразованием из Int в Float.

Также полезно отправить сообщение об ошибке.

1

Попробуйте выполнить SELECT самостоятельно с помощью бита INSERT, чтобы проверить, действительно ли ваш запрос возвращает некоторые данные.

Редактировать: Как и другие пользователи, DATEDIFF возвращает int, а не float, но это не должно помешать INSERT вставлять некоторые данные.

0

DATEDIFF возвращает Int не поплавок - это то, что этот вопрос вы испытываете?

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, никогда дробь.