Как вычислить различие в часах (десятичное число) между двумя датами в SQL Server?

Тысячи записей против тысяч записей обычно не являются проблемой. Я использовал SSIS для импорта миллионов записей с дедупликацией как это.

я очистил бы базу данных, чтобы удалить нечисловые символы во-первых и не пустить их.

76
задан Marc 20 November 2009 в 14:32
поделиться

6 ответов

DATEDIFF (час, start_date, end_date ) даст вам количество часов, пересеченных между start_date и end_date .

Если вам нужно количество часов в долях, вы можете использовать DATEDIFF с более высоким разрешением и разделите результат:

DATEDIFF(second, start_date, end_date) / 3600.0

Документация для DATEDIFF доступна на MSDN:

http://msdn.microsoft.com/en-us/library/ms189794% 28SQL.105% 29.aspx

148
ответ дан 24 November 2019 в 11:13
поделиться

DATEDIFF, но обратите внимание, что он возвращает целое число, поэтому, если вам нужны доли часов, используйте что-то вроде этого: -

CAST(DATEDIFF(ss, startDate, endDate) AS decimal(precision, scale)) / 3600
9
ответ дан 24 November 2019 в 11:13
поделиться

Вы, вероятно, ищете функцию DATEDIFF .

DATEDIFF (datepart, startdate, enddate)

Где код может выглядеть так:

РАЗНДАТ (чч, начальная дата, конечная дата)

0
ответ дан 24 November 2019 в 11:13
поделиться

ВЫБРАТЬ РАЗНДАТ (чч, firstDate, secondDate) ОТ tableName ГДЕ ...

-1
ответ дан 24 November 2019 в 11:13
поделиться
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

0
ответ дан 24 November 2019 в 11:13
поделиться

Просто вычтите два значения 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

Это работает, потому что все значения datetime хранятся внутри как пара целых чисел, первое целое число - это количество дней с 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 миллисекунды.

14
ответ дан 24 November 2019 в 11:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: