У меня проблема с разницей между двумя датами в годах, месяцах, днях без использования функции, только в инструкции Select.Разница SQL между датами (год, месяц, день)
До сих пор у меня этот грязный код, но он не работает так хорошо, как иногда месяц/день -. tblProject.BillingDate - StartDate, tblServiceTicket.ServiceTicketDate - это EndDate.
CONVERT(varchar(12),datediff(YEAR,tblProject.BillingDate,tblServiceTicket.ServiceTicketDate)) + ' year, '
+ CONVERT(varchar(12),DATEDIFF(MM, DATEADD(YY, datediff(YEAR,tblServiceTicket.ServiceTicketDate,tblProject.BillingDate), tblServiceTicket.ServiceTicketDate), tblProject.BillingDate)) + ' months, '
+ CONVERT(varchar(12),DATEDIFF(DD, DATEADD(MM, DATEDIFF(MM, DATEADD(YY, (datediff(YEAR,tblProject.BillingDate,tblServiceTicket.ServiceTicketDate)), tblProject.BillingDate), tblServiceTicket.ServiceTicketDate), DATEADD(YEAR, datediff(YEAR,tblProject.BillingDate,tblServiceTicket.ServiceTicketDate) , tblProject.BillingDate)), tblServiceTicket.ServiceTicketDate)) + ' days '
Почему вы не просто используете DATEDIFF самостоятельно? – dfundako
И вы использовали функцию CONVERT в вашем примере. – DVT
Datediff придется использовать, но не так, как вы думаете. И вам нужно будет установить множество правил для обработки дел в реальном мире, таких как '@dstart = '20161231'',' @dend =' 20170101'', где 'DATEDIFF' возвращает 1, проверяете ли вы год , месяц или день. То, что вы ищете, - это вычисление INTERVAL в годах, месяцах, днях, а не в функции датированного типа. –