找到一周的最后一天

时间:2014-02-10 19:55:52

标签: sql sybase sybase-ase

我有一个包含大量日期的表格(选项成熟日期准确无误)。我需要查询此数据库以查找存储在表中的特定周的最后一天。

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

我创建了以下查询以查找特定日期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周。

1 个答案:

答案 0 :(得分: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,则意味着它通过了第二周,但是当它实际上应该是3时,它会四舍五入为2.

如果你添加CEILING和CONVERT到十进制应该工作..

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