【问题标题】:datepart in sql on year changesql中的datepart在年份变化时
【发布时间】:2016-01-05 06:17:57
【问题描述】:

我在 SP 中使用 datepart 函数。用于比较指定日期的星期和年份。

现在我的查询随着新年的开始而出现。我有一张名为“任务”的表,它按日期存储任务。现在,当我使用 DATEPART(YY,'2016-01-05') 执行 SP 时。它提供了正确的 2016 年数据。但是我用 DATEPART(ISOWK,'2016-01-05') 执行它,它也提供了 2015 年的数据和 2016 年的数据。

我想要从 2015 年 12 月 28 日到 2016 年 1 月 2 日的数据。本周数据。而且我无法获得 1 月 1 日和 2 日的数据。请帮我解决这个问题。

谢谢,

【问题讨论】:

  • 请出示您创建的SP
  • 为什么不能使用 date>= 2015-12-28 AND date=
  • 您说“DATEPART(ISOWK,'2016-01-05') ,它给出了 2015 年的数据和 2016 年的数据。”。您还说“我无法获得第一和第二的数据”......矛盾请澄清??
  • 我认为您的要求不是很清楚 - 但处理年终的一个简单启发式方法是,如果周数 > 30 并且月份是 1 月,则从年。

标签: sql sql-server


【解决方案1】:

ISOWK 返回周数

您正在尝试获取从 2015-12-28 到 2016-01-02 的日期。 2015-12-28 的周数是 53,2016-01-02 的周数是 53

【讨论】:

    【解决方案2】:

    如果您已经确定了开始和结束日期,那么您可以使用如下所示的简单查询来过滤日期范围。

    在查询中提及日期字符串时,请确保您坚持使用 SQL Server 会自动理解的这种格式 :yyyymmdd。您不需要DATEPART 来获取两个日期之间的记录。

    查询日期范围的过滤

    SELECT TaskID, TaskDescription
     FROM  Tasks 
    where TaskDate between '20151228' and '20160102'
    

    另一个可用于日期范围过滤的查询

    SELECT TaskID, TaskDescription
     FROM  Tasks 
    where TaskDate >= '20151228' and TaskDate <= '20160102'
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-03-08
      • 2023-03-13
      • 2018-01-05
      • 2014-04-23
      • 2017-03-18
      • 2011-11-15
      • 1970-01-01
      相关资源
      最近更新 更多