【发布时间】:2014-04-28 07:31:48
【问题描述】:
我对 SQL 很陌生,并在 Select 中使用以下行来获取 10 月的第一个和最后一个星期一(@selYear 定义年份)。
这里有人可以告诉我如何调整它,使其返回 10 月的第二、第三和第四个星期一 + 提供解释,以便我可以在其他日期进一步修改? p>
我是否只需将第一个公式中的最后一个 0 更改为 7、14 或 21 以添加额外的周数? 如果我想要星期五或星期四而不是星期一,那么我是否只需将 6 替换为 4 或 3 ?
--1st Monday in October
DATEADD(d, DATEDIFF(d, 0, DATEADD(m, 10-1, DATEADD(yy, DATEDIFF(yy, 0, @selYear), 6)))/7*7, 0),
--last Monday in October
DATEADD(d, DATEDIFF(d, 0, DATEADD(m, 10, DATEADD(yy, DATEDIFF(yy, 0, @selYear), 6)))/7*7, -7),
编辑: @selYear 在我的例子中被定义为 @selYear nvarchar(4) 并且我插入的表格列被格式化为日期时间 - 也许这是错误的,因为结果应该始终是一个有效的日期?
非常感谢,迈克。
【问题讨论】:
-
@dean -
@selyear出现在看起来像预期日期的位置。如果你将2014转换为一个日期,你会得到1905-07-08。所以我建议你重复你的测试,但从今年的某个时间点开始使用@selYear作为日期时间。 -
谢谢大家。以上对我来说是正确的——这只是关于如何为其他日期调整它。当然,如果我没有以正确的方式执行此操作,或者只是巧合,请告诉我。结果应始终是有效日期。 :)
-
我更新了我的帖子 - 请参阅编辑。
-
嗯,首先要提到的是,我认为显示的查询已损坏 - 从 2100 年开始。据我所知,它有效地计算了与今年具有相同日历的 1900-06 范围内的一年的偏移量,然后将该偏移量应用回那一年以获得正确的日期。但是一旦超过 2100 年,这将不起作用,因为那一年不会是闰年。
-
@Damien_The_Unbeliever:谢谢 - 这与我的需要无关。
标签: sql sql-server date datetime stored-procedures