Мне нужно вычислить разницу в часах (десятичный тип) между двумя датами в SQL Server 2008.
Мне не удалось найти какой-либо полезный метод преобразования datetime в десятичное с помощью «CONVERT» в MSDN.
Кто-нибудь может мне с этим помочь?
ОБНОВЛЕНИЕ:
чтобы было ясно, мне также нужна дробная часть (таким образом, десятичный тип). Значит с 9:00 до 10:30 он должен мне вернуть 1.5.
datepart
передаваемый в,DATEDIFF
будет контролировать разрешение вывода. Например, еслиstart_date
иend_date
отличается на 59 секунд, тоDATEDIFF(MINUTE, start_date, end_date) / 60.0
вернет 0, ноDATEDIFF(second, start_date, end_date) / 3600.0
вернет 0,0163888 (59/3600).DATEDIFF
при разрешении выше часа) работает. Например,SELECT DATEDIFF(second, DATEADD(minute, -15, GETUTCDATE()), GETUTCDATE()) / 3600.0
возвращает 0,250000.Просто вычтите два значения datetime и умножьте на 24:
Select Cast((@DateTime2 - @DateTime1) as Float) * 24.0
тестовый сценарий может быть:
Declare @Dt1 dateTime Set @Dt1 = '12 Jan 2009 11:34:12' Declare @Dt2 dateTime Set @Dt2 = getdate() Select Cast((@Dt2 - @Dt1) as Float) * 24.0
Это работает, потому что все даты и времени хранятся внутри как пара целых чисел, первое целое число - это количество дней с 1 января 1900 года, а второе целое число (представляющее время) - это количество ( 1 ) тиков с полуночи. (Для SmallDatetimes целое число временной части - это количество минут с полуночи). Любая арифметика со значениями использует временную часть как долю дня. 6 утра = 0,25, полдень = 0,5 и т. Д. Подробнее см. Ссылку MSDN здесь .
Итак, Cast ((@ Dt2 - @ Dt1) as Float) дает вам общее количество дней между двумя датами. Умножьте на 24, чтобы преобразовать в часы. Если вам нужно общее количество минут, умноженное на минуты в день (24 * 60 = 1440) вместо 24 ...
ПРИМЕЧАНИЕ 1. Это не то же самое, что тик dotNet или javaScript - этот тик составляет около 3,33 миллисекунды.
источник
DATEDIFF, но обратите внимание, что он возвращает целое число, поэтому, если вам нужны доли часов, используйте что-то вроде этого: -
источник
Используя Postgres, у меня были проблемы с DATEDIFF, но я добился успеха:
что дало мне результат вроде "14,3"
источник
Declare @date1 datetime Declare @date2 datetime Set @date1 = '11/20/2009 11:00:00 AM' Set @date2 = '11/20/2009 12:00:00 PM' Select Cast(DateDiff(hh, @date1, @date2) as decimal(3,2)) as HoursApart
Результат = 1,00
источник
Вероятно, вы ищете функцию РАЗНДАТ .
Код может выглядеть так:
РАЗНДАТ (чч, начальная дата, конечная дата)
источник
Или используйте это для двух знаков после запятой:
источник
ВЫБЕРИТЕ DATEDIFF (чч, firstDate, secondDate) FROM tableName WHERE ...
источник