use*_*817 6 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
Run Code Online (Sandbox Code Playgroud)
你们有没有想过如何改变最后一个条件,以便3月28日被认为是本月的第5周,而不是目前正在进行的第4周.
您还可以使用 DATEPART 获取周数(一年中),但是,您也可以获取每个月的 1 号,并获取周数,这样您就可以获得:我的日期周 - 第一天周本月 + 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
Run Code Online (Sandbox Code Playgroud)
编辑:此外,查看您的代码,您可以添加天花板。如果结果 == 2.7,则意味着已经过了第 2 周,但是,当实际应该为 3 时,它会四舍五入为 2。
如果添加 CEILING 并且转换为十进制应该可以工作..
SELECT MONTH(@Dt),
YEAR(@Dt),
((CEILING(Convert(decimal,DATEPART(day,@Dt)-1)/7)) + 1)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
394 次 |
| 最近记录: |