试图找到之间

时间:2018-07-26 15:08:09

标签: sql sql-server

数据样本

ACCOUNT  STATUS  EFF_DT     EXP_DT
1234     C       15Jun2018  31Dec9999
1234     A       14Oct2015  15Jun2018

C表示他们已取消。 EFF_DT表示取消日期 AND EXP_DT也是他们的取消日期。我正在尝试找出与我们联系后的8到14天之间是否取消订单。现在,我能够看到他们是否在1-30之间取消了联系。

我有一个SQL代码,其中声明了Contact Date + 30。因此,联系日期后30天的结果是:

AND B.EFF_DT <= (A.CONTACT_DT+30)

AND B.EXP_DT > (A.CONTACT_DT+30)

在寻找一个介于两者之间的范围时,我需要帮助。 所以我想在8到14之间找到Contact_DT

所以要在接触8天到接触14天之间寻找结果。

3 个答案:

答案 0 :(得分:0)

您正在使用两个不同的字段来匹配您的日期,在这种情况下,请尝试以下操作:

    b.eff_dt between dateadd(day,8,a.contact_dt) and dateadd(day,14,a.contact_dt) 
and b.exp_dt between dateadd(day,8,a.contact_dt) and dateadd(day,14,a.contact_dt)

答案 1 :(得分:0)

根据您的示例代码以及对它所做的解释,您可以将其分别更改为8天和14天。

AND B.EFF_DT <= DATEADD(DAY,8,A.CONTACT_DT)  --not sure if you want 8 or 14 here
AND B.EXP_DT > DATEADD(DAY,14,A.CONTACT_DT)  --not sure if you want 8 or 14 here

或者,如果您的新逻辑适用于 both 字段,则可以将其写为:

AND B.EFF_DT BETWEEN DATEADD(DAY,8,A.CONTACT_DT) AND DATEADD(DAY,14,A.CONTACT_DT) 
AND B.EXP_DT BETWEEN DATEADD(DAY,8,A.CONTACT_DT) AND DATEADD(DAY,14,A.CONTACT_DT) 

答案 2 :(得分:0)

@ Dawn685

尝试一下。我假设CONTACT_DT是日期列,因此使用DATEADD函数添加8天或14天。 另外,这里发生的是EFF_DT在合同日期+8和合同日期+14之间,或者EXP_DT在合同日期+8和合同日期+14之间

AND 
(
B.EFF_DT BETWEEN DATEADD(DAY, 8, A.CONTACT_DT) AND DATEADD(DAY, 14, A.CONTACT_DT) 
OR
B.EXP_DT BETWEEN DATEADD(DAY, 8, A.CONTACT_DT) AND DATEADD(DAY, 14, A.CONTACT_DT) 
)