SQL按年龄获得客户

时间:2017-12-13 01:05:05

标签: sql sql-server

如何获得一份客户名单,在两个日期的给定时间间隔内,他们的年龄为5年或10年?

只有一个日期的查询是:

SELECT * FROM Customers C  
WHERE DATEDIFF(MONTH,C.StartDate,@Date)=60  
OR DATEDIFF(MONTH, C.StartDate,@Date)=120

3 个答案:

答案 0 :(得分:4)

您希望客户在开始时为5或更少,最后为5或更高 - 这意味着在该范围内的某个时间点他们是5。

SELECT * FROM Customers C
WHERE (DATEDIFF(MONTH,C.StartDate,@StartDate)<=60 AND DATEDIFF(MONTH,C.StartDate,@EndDate) >=60)
    OR (DATEDIFF(MONTH,C.StartDate,@StartDate)<=120 AND DATEDIFF(MONTH,C.StartDate,@EndDate) >=120)

答案 1 :(得分:1)

您可以使用下面的查询 See live demo

DECLARE @Date1 DATE
DECLARE @Date2 DATE
SET @Date1='03-19-2017'
SET @Date2='12-19-2017'

SELECT * FROM Customers C  
WHERE ( DATEADD(m,  60,C.StartDate) BETWEEN @Date1 AND @Date2 )
 OR 
(DATEADD(m, 120,C.StartDate) BETWEEN @Date1 AND @Date2)

答案 2 :(得分:0)

T-SQL的datediff函数的语法是:

DATEDIFF ( datepart , startdate , enddate )  

日期的顺序很重要,要获得正整数结果,较早的日期应该是第一个,而较晚的日期应该是第二个。如果你这样做,结果将是负数。

您可以使用ABS()

来解决这个问题
ABS( DATEDIFF ( datepart , date1 , date2 )  )