Я могу упомянуть четыре важные функции MS SQL Server, которые могут быть очень полезны:
1) Функция DATEDIFF () отвечает за вычисление различий между двумя датами, результатом может быть « год четверть месяца день день год день неделя минута секунда микросекунда микросекунда наносекунда » указано в первом параметре ( datepart ):
select datediff(day,'1997-10-07','2011-09-11')
2) Вы можете использовать функцию GETDATE () , чтобы получить фактическое время и рассчитать разницу какой-либо даты и фактической даты:
select datediff(day,'1997-10-07', getdate() )
3) Еще одна важная функция - DATEADD () , используемая для преобразования некоторого значения в datetime с использованием той же datepart даты, которую вы можете добавить (с положительными значениями) или вычитать (с отрицательными значениями) одну базовую дату:
select DATEADD(day, 45, getdate()) -- actual datetime adding 45 days
select DATEADD( s,-638, getdate()) -- actual datetime subtracting 10 minutes and 38 seconds
4) Функция CONVERT () была создана для форматирования даты так, как вам нужно, это не параметрическая функция, но вы можете использовать часть результата для форматирования результата так, как вам нужно:
select convert( char(8), getdate() , 8) -- part hh:mm:ss of actual datetime
select convert( varchar, getdate() , 112) -- yyyymmdd
select convert( char(10), getdate() , 20) -- yyyy-mm-dd limited by 10 characters
DATETIME рассчитывается в секундах, и один интересный результат, смешивающий эти четыре функции, заключается в показе форматированной разницы между часами, минутами и секундами ( чч: мм: сс ) между двумя датами:
declare @date1 datetime, @date2 datetime
set @date1=DATEADD(s,-638,getdate())
set @date2=GETDATE()
select convert(char(8),dateadd(s,datediff(s,@date1,@date2),'1900-1-1'),8)
... результат 00: 10: 38 (638 с = 600 с + 38 с = 10 минут и 38 секунд)
Другой пример:
select distinct convert(char(8),dateadd(s,datediff(s, CRDATE , GETDATE() ),'1900-1-1'),8) from sysobjects order by 1