- Конвертировать в минуты
- деление на 1440 дает целые дни
- по модулю 1440 дает оставшиеся минуты, разделите на 60 для часов
Что-то вроде (не проверено):
SELECT
CAST(DATEDIFF(minute, CreatedDate, ClosedDate) / 1440 AS varchar(20)) + '.'
CAST((DATEDIFF(minute, CreatedDate, ClosedDate) % 1440) / 60 AS varchar(20))
FROM
MyTable
Возможно, вам придется поиграть с часовым представлением в cade, которое я неправильно понял
DATEDIFF для дня и часа идет по границам: то есть, если между двумя значениями, охватывающими полночь, будет всего 3 минуты, будет разница в один час / день. Так что я использовал минуты
Edit:
Для переполнения int из DATEDIFF требуется разница в 4000+ лет
Мысль:
- Использование datetime2 и CreatedDate наименьшего
0001-01-01
- ClosedDate - это значение часового типа, например
9999-12-31
, скажем, для "открытых" элементов
- CreatedDate и ClosedDate являются varchar, и преобразование в datetime является ошибочным
Ваш пример показывает разницу в 72 дня, что составляет около 104 тыс. Минут.
Я бы попробовал это, чтобы увидеть, где у вас разница в 1000 с лишним лет, которая составляет всего полмиллиарда или около того минут:
SELECT * FROM mytables
WHERE DATEDIFF(year, CreatedDate, ClosedDate) > 1000