SQL Server日期中的差异查询和TRIM

时间:2018-05-25 14:14:39

标签: sql-server date trim

我下面有一个非常棘手的场景,如果有人可以提供帮助,我会非常感激。

我有两张桌子:

TX

TX_External

TX有两列:ID& Date_Reported

TX_External有两列:ID& Date_Received

基本上我想找到TX_external的Date_Received与TX表的Date_Reported之间的天数差异。它必须是工作日(没有周末或银行假日)。

所以我的最终输出应该是这样的

客户ID | Days_Taken

主要问题。 我的主要问题是两个表中的id都有所不同,例如:

Tx-ID = AB_123456_ABC

TX_External- ID = AB_123456

因为您可以看到它们是相似的并且引用相同的事务,但TX表ID在" _ABC"的版本中的数字之后附加了随机附加内容。这可能是额外的数字字母括号等(所以AB_123456_ABC,AB_123456_E(1),AB_123456_H等)。为了增加混淆,ID不是一致的大小,即它们都不是AB_123456,因为有些可能是AB_12345678! 因此修剪到第二个_并修剪

我如何修剪它以便我可以得到它与Tx_External ID(AB_123456)完全相同然后这将让我做一个匹配所以对于那个确切的ID,我可以计算所采取的工作日?我可以在一个查询中完成所有操作吗?

对于提前大量描述感到抱歉,非常乐意进一步解释。

1 个答案:

答案 0 :(得分:0)

   select * from tx a 
        cross apply (select case when a.ID like '%[_]%[_]%' then
       replace(a.ID, reverse(left(reverse(a.ID), charindex('_', reverse(a.ID)))), '')
        else a.ID end txstripped)b
   join TX_External c cross apply (select case when c.ID like '%[_]%[_]%' then
     replace(c.ID, reverse(left(reverse(c.ID), charindex('_', reverse(c.ID)))), '')
     else ID end txexternal_stripped)d
   on b.txstripped=d.txexternal_stripped