首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在一个月的SQL中,如果开始日是‘星期一’,如何从日期中提取‘周数字’和‘天数字’

在一个月的SQL中,如果开始日是‘星期一’,如何从日期中提取‘周数字’和‘天数字’
EN

Stack Overflow用户
提问于 2019-05-19 16:03:02
回答 5查看 314关注 0票数 2

我从一个日期中提取了以下内容:

周数日数

我一周的第一天是星期一。

例如,日期是:‘2019年5月1日’或'2019-05-01‘

然后

周数=1天数=3

因为今天是2019年5月1日星期三。

我正在使用MS SQL Server 2012。并使用net中的以下代码来获取周数。我从这里得到了周的数字,但我不知道它实际在做什么。

代码语言:javascript
运行
复制
select datediff(week, dateadd(week, datediff(week, 0, dateadd(month, datediff(month, 0, @date), 0)), 0), @date - 1) + 1

谁能给我解释一下,并告诉我如何提取日期数字。

EN

回答 5

Stack Overflow用户

发布于 2019-05-19 16:51:32

无论您的@@DATEFIRST集合MS Doc如何,此选择都将为您提供日期为星期几(1:星期一,7:星期日)的@date

代码语言:javascript
运行
复制
select (DATEPART(DW, @date) + @@DATEFIRST + 5) % 7 + 1 as [Day of Week]
票数 0
EN

Stack Overflow用户

发布于 2019-05-19 19:59:50

如果您设置了datefirst,您可以简单地执行以下操作:

代码语言:javascript
运行
复制
set datefirst 1;  -- "1" = "Monday"

select datepart(week, getdate()), datepart(weekday, getdate())
票数 0
EN

Stack Overflow用户

发布于 2019-05-19 22:27:04

其他人也提到了如何获得星期几。

就获取月份周的代码而言:

代码语言:javascript
运行
复制
select datediff(week, dateadd(week, datediff(week, 0, dateadd(month, datediff(month, 0, @date), 0)), 0), @date - 1) + 1

在我看来,它似乎得到了从第0天到当前日期之间经过的完整月数,给出了一个月序列。

然后将零个月添加到这个数字(显然是用来将月份序列转换回表示当前月份开始的日期),给我们一个月初日期。

然后,它获得从零日到月初日期之间经过的完整周数,从而给出一周序列。

然后,将周序列转换回表示周开始日期的日期,该日期表示在月初日期或之前的星期一。

然后,它以周为单位获取星期一或之前日期与当前日期前一天之间的差值,并加1(因此,该月的第一周表示为第1周)。

这听起来像是一个合理的算法,但如果没有测试和检查中间值,或者除非您从权威来源找到它,否则我不会支持它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56205858

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档