Есть ли любой способ взять различие между два datetime
в SQL-сервере?
Например, мои даты
2010-01-22 15:29:55.090
2010-01-22 15:30:09.153
Так, результат должен быть 14.063 seconds
.
Просто предостережение, чтобы добавить о Datesiff, он считает количество раз, когда вы передаете границу, которую вы указываете в качестве своих единиц, поэтому подвержены проблемам, если вы ищете точный срок. например
select datediff (m, '20100131', '20100201')
дает ответ 1, потому что он пересек границу с января по февралю, поэтому, хотя пролет составляет 2 дня, Dateiff вернет значение 1 - он пересек 1 границу даты.
select datediff(mi, '2010-01-22 15:29:55.090' , '2010-01-22 15:30:09.153')
дает значение 1, опять же, он передал минутую границу один раз, поэтому, хотя это примерно через 14 секунд, его возвращаются в виде одной минуты при использовании минут в качестве блоков.
SELECT DATEDIFF (MyUnits, '2010-01-22 15:29:55.090', '2010-01-22 15:30:09.153')
Замените «Myunits» на основе Датифифа на Datatiff на MSDN
SELECT DATEDIFF(day, '2010-01-22 15:29:55.090', '2010-01-22 15:30:09.153')
Заменить день
с другими подразделениями, в которых вы хотите получить разницу, вроде , вторых
, минута
и т. Д.
Внутри SQL-сервера даты хранятся в виде 2-х целых чисел. Первое целое число - это количество дат до или после базовой даты (1900/01/01). Второе целое число хранит количество тиков часов после полуночи, каждый тик - 1/300 секунды.
В связи с этим, я часто нахожу, что самый простой способ сравнения дат - это их простое вычитание. Это обрабатывает 90% моих случаев использования. Например,
select date1, date2, date2 - date1 as DifferenceInDays
from MyTable
...
Когда мне нужен ответ в единицах, отличных от дней, я использую DateDiff.