Sql 比较两列日期,如果它们在6个月内返回

Sql 比较两列日期,如果它们在6个月内返回,sql,sql-server,Sql,Sql Server,这是我的问题 select distinct m.number --as FirstAccount, m2.number as SecondAccount from jm_people p inner join master m on p.accountid = m.number inner join JM_Subpoena s on m.number = s.number inner join jm_people p2 on p.pid = p2.pid inner join master m

这是我的问题

select distinct m.number --as FirstAccount, m2.number as SecondAccount
from jm_people p
inner join master m on p.accountid = m.number
inner join JM_Subpoena s on m.number = s.number
inner join jm_people p2 on p.pid = p2.pid
inner join master m2 on p2.accountid = m2.number
inner join JM_Subpoena s2 on m2.number = s2.number
and m.number != m2.number
我需要比较
s.dateRequested
s2.dateRequested
,如果它们在6个月之内或等于6个月,我需要返回结果

有什么办法吗

例如:

s.dateRequested = '12/18/2013 00:00:000'
s2.dateRequested = '07/27/2013 00:00:000'
它将返回此结果,因为它们在6个月内

s.dateRequested = '12/18/2013 00:00:000'
s2.dateRequested = '03/27/2013 00:00:000'
它不会返回此结果。

使用DATEDIFF函数

选择不同的m.number--作为第一个帐户,m2.number作为第二个帐户
来自jm_people p
p.accountid=m.number上的内部联接主节点m
m.number=s.number上的内部连接JM_传票s
p.pid=p2.pid上的内部连接jm_人员p2
p2上的内部联接主节点m2.accountid=m2.number
m2.number=s2.number上的内部连接JM_传票s2
和m.number!=m2.1个
其中DATEDIFF(mm,s2.dateRequested,s.dateRequested)<6或
DATEDIFF(mm,s2.dateRequested,s.dateRequested)=6
和DATEPART(dd,s2.dateRequested)使用DATEDIFF函数

选择不同的m.number--作为第一个帐户,m2.number作为第二个帐户
来自jm_people p
p.accountid=m.number上的内部联接主节点m
m.number=s.number上的内部连接JM_传票s
p.pid=p2.pid上的内部连接jm_人员p2
p2上的内部联接主节点m2.accountid=m2.number
m2.number=s2.number上的内部连接JM_传票s2
和m.number!=m2.1个
其中DATEDIFF(mm,s2.dateRequested,s.dateRequested)<6或
DATEDIFF(mm,s2.dateRequested,s.dateRequested)=6

DATEPART(dd,s2.dateRequested)有DATEDIFF函数有DATEDIFF函数根据OP的精确程度,最好使用180天而不是6个月;2013年6月13日距离2013年12月18日还有6个月,但已经超过180天。这只是一种工作。DATEDIFF函数返回跨越的指定边界数(在本例中为月边界)。因此
选择DATEDIFF(mm,'2013-12-31 23:59:59','2014-01-01 00:00:00')
返回1,即使只有1秒的差异
SELECT DATEDIFF(mm,'2013-12-01 00:00:00','2014-01-01 23:59:59')
也会返回1,尽管它已经快两个月了。我遇到的另一个问题是数据库的设置方式。s2.dateRequested可能大于s.dateRequested。是否可以将其更改为天,然后将其替换为@Becuzz是的,因此我也添加了DATEPART来比较天。根据OP需要的精确程度,使用180天可能比使用6个月更好;2013年6月13日距离2013年12月18日还有6个月,但已经超过180天。这只是一种工作。DATEDIFF函数返回跨越的指定边界数(在本例中为月边界)。因此
选择DATEDIFF(mm,'2013-12-31 23:59:59','2014-01-01 00:00:00')
返回1,即使只有1秒的差异
SELECT DATEDIFF(mm,'2013-12-01 00:00:00','2014-01-01 23:59:59')
也会返回1,尽管它已经快两个月了。我遇到的另一个问题是数据库的设置方式。s2.dateRequested可能大于s.dateRequested。是否可以将它改为天,从那以后它将取代@Becuzz是的,所以我添加了DATEPART来比较天。
select distinct m.number --as FirstAccount, m2.number as SecondAccount
from jm_people p
inner join master m on p.accountid = m.number
inner join JM_Subpoena s on m.number = s.number
inner join jm_people p2 on p.pid = p2.pid
inner join master m2 on p2.accountid = m2.number
inner join JM_Subpoena s2 on m2.number = s2.number
and m.number != m2.number
WHERE DATEDIFF( mm, s2.dateRequested, s.dateRequested) < 6 OR
DATEDIFF( mm, s2.dateRequested, s.dateRequested) = 6 
AND DATEPART( dd, s2.dateRequested) <= DATEPART( dd, s.dateRequested)