【问题标题】:Finding the last day of the week查找一周的最后一天
【发布时间】:2014-03-08 08:14:10
【问题描述】:

我有一张包含一堆日期的表格(准确地说是期权到期日期)。我需要查询此数据库以查找存储在表中的特定一周的最后一天。

我将查询此表的所有内容是年、月和特定周。基于此,我需要找到存储在与此匹配的表中的日期。

我创建了以下查询来查找 2013 年 3 月 28 日这个特定日期

SELECT M_SETNAME, M_LABEL, M_MAT FROM OM_MAT_DBF
WHERE M_SETNAME = 'IMM_OSET  '
AND MONTH(M_MAT) = 3
AND YEAR(M_MAT) = 2013
AND ((DATEPART(day,M_MAT)-1)/7 + 1) = 5

你们知道我可以如何更改最后一个条件,以便将 3 月 28 日视为本月的第 5 周,而不是目前的第 4 周。

【问题讨论】:

  • 嗯,3 月 28 日是该月的第四周(第一周 1-7;第二周 8-14;第三周 15-21;第四周 22-28 )。您计算一个月中的周数的逻辑是什么?
  • 我的逻辑将一周的最后一天视为一周。所以,3 月 1 日是星期五,因此当我将最后一个条件设置为 1 时,我的查询将给我 2013 年 3 月 1 日。所以基本上是 3 月 1 日 - 第 1 周 3 月 8 日 - 第 2 周 3 月 15 日 - 第 3 周 3 月 22 日 - 3 月第 4 周28 - 第 5 周(不是 29 b/c,该表只有 3 月 28 日,而不是 3 月 29 日)
  • 第一天是星期六的月份如何计算? (第一周没有星期五!)另外,什么是“一周的最后一天”...有些日历从周日(周日至周六)开始,而另一些则从周一(周一至周日)开始。

标签: sql sybase sap-ase


【解决方案1】:

您也可以使用 DATEPART 来获取周数(一年中),但是,您也可以获取每个月的第一天,也可以获取一周,这样您就可以获得:我的日期的星期 - 星期本月的第一天 + 1。

这里有一个例子...

DECLARE @Dt datetime

SELECT @Dt='03-28-2013'

SELECT DATEPART( wk, @Dt) - DATEPART( wk, Convert(Date,Convert(varchar(4),YEAR(@Dt))
+ '-' + Convert(varchar(2), MONTH(@Dt))
+ '-' + Convert(varchar(2), 1))) + 1

编辑:另外,查看您的代码,您可以添加 CEILING。如果结果 == 2.7,则意味着它通过了第 2 周,但是,当它实际上应该是 3 时,它被四舍五入到 2。

如果你添加 CEILING 和 CONVERT to decimal 应该可以工作..

SELECT  MONTH(@Dt), 
        YEAR(@Dt), 
        ((CEILING(Convert(decimal,DATEPART(day,@Dt)-1)/7)) + 1) 

【讨论】:

    猜你喜欢
    • 2011-06-14
    • 1970-01-01
    • 2023-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多