【发布时间】:2016-12-15 07:18:45
【问题描述】:
我在获取年、月、日两个日期之间的差异时遇到了问题,而无需使用函数,仅使用 Select 语句。
到目前为止,我有这个凌乱的代码,但它不能很好地工作,因为有时月/日是 - 。 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?
-
你确实在你的例子中使用了 CONVERT 函数。
-
Datediff 将不得不被使用,但不是你想的那样。您将不得不设置许多规则来处理现实世界的案例,例如
@dstart = '20161231'、@dend = '20170101',其中DATEDIFF无论您检查年、月还是日都会返回 1。您正在寻找的是年、月、日的 INTERVAL 计算,而不是 datediff 类型的函数。
标签: sql sql-server