Тысячи записей против тысяч записей обычно не являются проблемой. Я использовал SSIS для импорта миллионов записей с дедупликацией как это.
я очистил бы базу данных, чтобы удалить нечисловые символы во-первых и не пустить их.
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
DATEDIFF, но обратите внимание, что он возвращает целое число, поэтому, если вам нужны доли часов, используйте что-то вроде этого: -
CAST(DATEDIFF(ss, startDate, endDate) AS decimal(precision, scale)) / 3600
Вы, вероятно, ищете функцию DATEDIFF .
DATEDIFF (datepart, startdate, enddate)
Где код может выглядеть так:
РАЗНДАТ (чч, начальная дата, конечная дата)
ВЫБРАТЬ РАЗНДАТ (чч, firstDate, secondDate) ОТ tableName ГДЕ ...
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
Просто вычтите два значения 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 миллисекунды.