【发布时间】:2017-08-28 16:30:55
【问题描述】:
我正在尝试为 DST 设置查找特定月份内的特定日期。我从another post 找到了代码。
SELECT
DATEADD(day,DATEDIFF(day,'19000107',DATEADD(month,DATEDIFF(MONTH,0,GETDATE()/*YourValuehere*/),30))/7*7,'19000107')
我还在another post 中找到了这个,可以提前一个月使用。
SELECT DATEADD(day,-1 - (DATEPART(weekday, @StartOfMarch) + @@DATEFIRST - 2) % 7,
@StartOfMarch
) AS LastSunday
我不太擅长 SQL,所以我正在寻找关于这里发生的事情以及这段代码为何有效的虚拟解释。据我所知,1900 年 1 月 7 日在这里很重要,各种内置的日期时间函数也很重要。一个简单的逐个播放细分将帮助我了解正在发生的一切。
这是针对 SQL Server 2016 的。
【问题讨论】:
-
您使用的是哪个版本的 SQL?链接的帖子要求提供 SQL 2000 的解决方案,但在最近的版本中处理日期/时间数据有显着增强。关于您正在尝试做的事情的更多细节也会很有用 - 您正在寻找哪些特定月份的特定日期?干杯。
-
@GarethLyons ... 更新了问题。我主要看 10 月和 3 月,但总的来说,我正在寻找足够好的解释,以便更好地掌握这里的概念。
-
哪个月的哪一天?我不明白你想要的结果集是什么。
-
哦...我正在寻找每个月的最后一个星期日。可用于查看特定日期是否在 3 月的最后一个星期日到 10 月的最后一个星期日(英国夏令时)之间的东西。
-
谢谢。众所周知,1900 年 1 月 7 日是星期日。其余的使用它与 GETDATE() 之间的差异,或者 /*Your value here*/ 来计算该特定月份的最后一个星期日。但在 SQL 2016 中必须有更好的方法来做到这一点。
标签: sql tsql date sql-server-2016