【问题标题】:SQL Server Difference in dates Query AND TRIMSQL Server 日期差异查询和修剪
【发布时间】:2018-05-25 14:14:38
【问题描述】:

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

我有两张桌子:

发送

TX_外部

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 计算所花费的工作日?我可以在一个查询中完成所有这些吗?

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

【问题讨论】:

  • 您可以使用 LEFT 功能。在这种情况下,Tx- ID = LEFT (TX_External- ID, 9)
  • 感谢您的快速回复,但请查看我的编辑更改,因为 id 并非都是一种尺寸
  • 看起来你想把每一个都修剪到第二个下划线,然后加入对吧?
  • 修复您的数据库模型并添加真正的外键。事实上,你将来会遇到越来越多的问题。你在找他们。
  • @DanielMarcus 是的,这正是我想要的

标签: sql-server date trim


【解决方案1】:
   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

【讨论】:

  • 这适用于关系。另一个要求是计算“工作日差异”,不包括周末和银行假日。在我看来,数据库缺少有关假期的信息,所以我看不到执行此额外步骤的方法。
  • 谢谢丹尼尔。 @TheImpaler 是什么意思,我如何使用来自 daniel 的上述查询并找到 Date_Reported 减去 Date_Received 的差异。
  • @TarikulIslam,请尝试以上更新的答案 - 刚刚在我这边测试过,它可以工作
  • 非常感谢@DanielMarcus
  • @DanielMarcus 你知道是否有可能在这个查询中计算出日期的差异
猜你喜欢
  • 1970-01-01
  • 2018-05-09
  • 2012-12-22
  • 1970-01-01
  • 1970-01-01
  • 2023-03-18
  • 1970-01-01
  • 2023-03-08
  • 1970-01-01
相关资源
最近更新 更多