【问题标题】:T-sql datediff doesn't look at the year if you pass in day for datepart?如果您将日期传递给日期部分,T-sql datediff 不会查看年份?
【发布时间】:2015-03-27 10:46:19
【问题描述】:

我在查询中使用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 等于 2016 年 3 月 11 日,是开始日期,因此任何 6 天后的日期都足以查询。但它以Previous_Service_Date 值返回的日期是:

4/5/2015
3/6/2016

所以查询应该只返回 2016 年 3 月 6 日的日期。有人可以帮我看看我哪里出错了吗? DATEDIFF 是否忽略了自我为 datepart 参数传递一天以来的日期?

【问题讨论】:

  • 你为什么在where中选择?
  • 无需再次查询基表即可获得与主查询相同的行。我不太明白您在这里尝试做什么,但您不需要将 Previous_Service_Date 作为日期计算的一部分。

标签: sql sql-server tsql datediff datepart


【解决方案1】:

知道了!在这行代码中:

WHERE Technician_ID = 150)) < 7

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

WHERE Technician_ID = 150)) BETWEEN 0 and 7

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

【讨论】:

    猜你喜欢
    • 2012-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多