如果你在daypart中传递日期,T-sql datediff不会查看年份?

时间:2015-03-27 10:46:19

标签: sql sql-server tsql datediff datepart

我在查询中使用datediff来返回距离开始日期少于7天的日期。

DECLARE @d1 DATE
SET @d1 = (SELECT CurrentServiceWeek FROM Technician WHERE ID = 150) 

SELECT 
    First_Name, Last_Name, Previous_Service_Date, 
    Address1, Address2, City, [State], Zip 
FROM 
    Customer 
JOIN 
    CustomerAddress ON Customer.ID = Customer_ID
WHERE 
    Technician_ID = 150 
    AND DATEDIFF(day, (@d1), (SELECT Previous_Service_Date 
                              FROM Customer 
                              WHERE Technician_ID = 150)) < 7

datediff也给了我不止一个结果。 CurrentServiceWeek等于3/11/2016并且是开始日期,因此任何6天的日期都足以满足查询要求。但它作为Previous_Service_Date值返回的日期是:

4/5/2015
3/6/2016

因此查询应仅返回2016年3月6日的日期。有人可以帮助我,所以我可以看到我出错的地方吗? DATEDIFF忽略自我datepart参数过了一天以来的年份吗?

1 个答案:

答案 0 :(得分:0)

知道了!在这行代码中:

WHERE Technician_ID = 150)) < 7

它会抓住不到7天的任何结果......这包括负值,所以我们需要类似的东西。

WHERE Technician_ID = 150)) BETWEEN 0 and 7

获取与开始日期相同的日期,且不超过开始日期的7天。我犯了一个愚蠢的逻辑错误。