【问题标题】:sql difference in two dates两个日期的sql差异
【发布时间】:2018-05-17 13:19:06
【问题描述】:

在 sql server 中,我有两个表:

Tran_Ex

Transactions

他们都有customer_id,这是加入表格的关键。

我想找出Date_Reported(来自交易)与Date_Received(来自Tran_ex)的工作日差异。我想要一个包含这些数字的额外专栏:

例如

Date Reported | Date Received | Difference in days

提前致谢

【问题讨论】:

  • 寻找DATEDIFF函数。
  • datediff 解决方案看起来是一个很好的开始。但是你说的是工作日。这通常意味着您要排除周末和节假日。除了 datediff 之外,您还想在此处使用日历表。您可以在此处阅读有关日历表的更多信息。 sqlservercentral.com/articles/calendar/145206

标签: sql sql-server date join


【解决方案1】:

使用DATEDIFF()函数()

你可以从这个查询中得到工作日(星期一到星期五)的区别,对于银行假期你需要单独的逻辑。

Select Date_Reported, 
Date_Received ,
(DATEDIFF(dd, Date_Reported, Date_Received) + 1)
-(DATEDIFF(wk, Date_Reported, Date_Received) * 2)
-(CASE WHEN DATENAME(dw, Date_Reported) = 'Sunday' THEN 1 ELSE 0 END)
-(CASE WHEN DATENAME(dw, Date_Received) = 'Saturday' THEN 1 ELSE 0 END)
 AS Working_days_Difference
from Tran_Ex as tx
inner join
Transactions as tr
on(tx.customer_id = tr.customer_id)

修改了基于@scsimon 的不使用速记的建议查询。

SELECT Date_Reported, 
   Date_Received , 
   datediff(day,((CASE WHEN Datename(weekday, Date_Reported) = 'Sunday' THEN 1 ELSE 0  END ) - (CASE WHEN Datename(weekday, Date_Received ) = 'Saturday' THEN 1 ELSE 0 END )),Datediff(day,(Datediff(week, Date_Reported, Date_Received ) * 2 ), 
   (Datediff(day, Date_Reported, Date_Received ) + 1 )))
   AS Working_days_Difference

    from Tran_Ex as tx
    inner join
    Transactions as tr
    on(tx.customer_id = tr.customer_id)

【讨论】:

  • 在您的原始答案中您没有使用速记,然后您更改了它。我鼓励您不要对日期时间格式使用速记。 Aaron has a good blog on this。此外,您需要确定他们的 DATEFIRST 设置是什么才能正常工作
  • 非常感谢
  • 感谢@scsimon 的建议,添加了没有速记的查询
  • 没问题@TanveerSinghBhatia 但你又错过了速记。而不是datediff(dd,,它将是datediff(day,,同样适用于wkdw。看看那篇文章。
  • 再次感谢@scsimon,也更改了日期部分的简写
【解决方案2】:

使用DATEDIFF()函数:

select t.Date_Reported, t1.Date_Received,
       datediff(day, t.Date_Reported, t1.Date_Received) [Difference in days]
from Tran_Ex tx
inner join Transactions t on t.customer_id  = tx.customer_id; 

【讨论】:

  • 非常感谢,这是否仅考虑工作日(不包括周末和银行假日)
  • 不,这不考虑任何形式的周末或节假日。这只是天数。请参阅我对您原始问题的评论。
猜你喜欢
  • 2015-06-21
  • 1970-01-01
  • 2023-03-23
  • 2011-01-08
  • 2014-10-12
  • 2020-03-13
  • 2021-10-21
  • 2014-01-18
  • 1970-01-01
相关资源
最近更新 更多