Почему эта вставка с оператором DATEDIFF не работает правильно? - PullRequest
0 голосов
/ 01 мая 2009
INSERT INTO timecrunch.dbo.intervals (IntervalID, Duration) 
SELECT ixInterval, DATEDIFF(hour, dtStart, dtEnd) FROM fogbugz.dbo.TimeInterval
WHERE dtEnd is not NULL

IntervalID - это int, Duration - это число с плавающей запятой

Я пытаюсь поместить все почасовые значения продолжительности в столбец Длительность ... Я предполагаю, что даже если он меньше часа, он будет использовать дробь, поэтому я положил число с плавающей точкой?

Справка.

PS: все работает нормально, без ошибок, но после того, как это сделано, таблица интервалов все еще пуста ... Я знаю, что данные находятся в таблице TimeInterval, хотя ...

Ответы [ 7 ]

3 голосов
/ 01 мая 2009

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

DATEDIFF(second, dtStart, dtEnd) / (3600.0)
2 голосов
/ 01 мая 2009

Чтобы вставить действительные доли часа, используйте:

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

2 голосов
/ 01 мая 2009

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

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

1 голос
/ 01 мая 2009

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

Редактировать: Как уже говорили другие, DATEDIFF возвращает целое число, а не число с плавающей запятой, но это не должно препятствовать вставке INSERT некоторых данных.

0 голосов
/ 01 мая 2009

DATEDIFF возвращает int, а не float - это проблема, с которой вы столкнулись?

0 голосов
/ 01 мая 2009

В Sql Server DateDiff возвращает int ( См. MSDN )

0 голосов
/ 01 мая 2009

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

...