两个日期的sql差异

问题描述 投票:-1回答:2

在sql server中,我有两个表:

Tran_Ex

Transactions

他们都有customer_id,这是加入桌子的关键。

我想找到来自Date_Reported(来自Tran_ex)的Date_Received(来自交易)的WORKING DAYS的差异。我想要一个带有这些数字的额外专栏:

例如

Date Reported | Date Received | Difference in days

提前致谢

sql sql-server date join
2个回答
2
投票

使用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)

0
投票

使用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; 
© www.soinside.com 2019 - 2024. All rights reserved.