【问题标题】:Find the first, second, etc. day of week in SQL Server在 SQL Server 中查找一周中的第一天、第二天等
【发布时间】:2011-06-22 13:57:48
【问题描述】:

我有一个数据库架构来创建与 Outlook 非常相似的提醒。您可以创建每周、每月和每年的提醒。

我需要能够找到类似的东西:

The first Friday of January
The third Wednesday of every 3 months.

谁能告诉我如何在 SQL Server 2008 中找到第一个、第二个、第三个、第四个等日期?

【问题讨论】:

  • 您如何构建查询以搜索“一月的第一个星期五”等?您是否在应用程序中使用此数据库?如果有,是什么语言?在代码中而不是在 SQL 端执行此操作可能(可能)更容易。

标签: sql-server sql-server-2008 date


【解决方案1】:

使用datepart 找出该月第一天的星期几:

datepart(weekday, '2011-06-01')

从中您可以计算出任何工作日的第一个,例如第一个星期一 (2):

(2 + 7 - datepart(weekday, '2011-06-01')) % 7 + 1

要得到第二个星期一,你只需在上面加上 7,以此类推。

要检查日期是否仍在同一个月内,您需要该月的最后一个日期,您可以通过从下个月的第一天减去一天得到:

datepart(day, dateadd(day, -1, '2011-07-01'))

【讨论】:

  • 请注意datepart 返回的值取决于SET DATEFIRST 的值,因此给定日期的值可能会因用户的区域设置/会话设置而异。请参阅此处的“星期和工作日日期部分参数”:msdn.microsoft.com/en-us/library/ms174420.aspx
  • @Ed Harper:说得好。上面的计算并不关心数字的含义,但您需要确保您的应用程序正确解释这些值。
猜你喜欢
  • 1970-01-01
  • 2011-11-02
  • 2022-11-10
  • 2021-03-11
  • 1970-01-01
  • 1970-01-01
  • 2017-12-29
  • 2012-10-08
  • 1970-01-01
相关资源
最近更新 更多