Почему этот INSERT с оператором DATEDIFF работает неправильно?

StackOverflow https://stackoverflow.com/questions/812047

  •  03-07-2019
  •  | 
  •  

Вопрос

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

IntervalID — целое число, Duration — число с плавающей запятой.

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

Помощь.

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

Это было полезно?

Решение

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

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

Другие советы

DATEDIFF возвращает Int количества пересеченных границ частей даты.Я ожидаю, что вы получите минимальное количество часов, если только не возникнет проблема с неявным преобразованием из 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, а не дробь.

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

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

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

В SQL Server Dateediff возвращает Int (См. MSDN)

DATEDIFF вернет целое число, а не число с плавающей запятой. Это проблема, с которой вы столкнулись?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top