我从一个日期中提取了以下内容:
周数日数
我一周的第一天是星期一。
例如,日期是:‘2019年5月1日’或'2019-05-01‘
然后
周数=1天数=3
因为今天是2019年5月1日星期三。
我正在使用MS SQL Server 2012。并使用net中的以下代码来获取周数。我从这里得到了周的数字,但我不知道它实际在做什么。
select datediff(week, dateadd(week, datediff(week, 0, dateadd(month, datediff(month, 0, @date), 0)), 0), @date - 1) + 1
谁能给我解释一下,并告诉我如何提取日期数字。
发布于 2019-05-19 16:51:32
无论您的@@DATEFIRST集合MS Doc如何,此选择都将为您提供日期为星期几(1:星期一,7:星期日)的@date
select (DATEPART(DW, @date) + @@DATEFIRST + 5) % 7 + 1 as [Day of Week]
发布于 2019-05-19 19:59:50
如果您设置了datefirst
,您可以简单地执行以下操作:
set datefirst 1; -- "1" = "Monday"
select datepart(week, getdate()), datepart(weekday, getdate())
发布于 2019-05-19 22:27:04
其他人也提到了如何获得星期几。
就获取月份周的代码而言:
select datediff(week, dateadd(week, datediff(week, 0, dateadd(month, datediff(month, 0, @date), 0)), 0), @date - 1) + 1
在我看来,它似乎得到了从第0天到当前日期之间经过的完整月数,给出了一个月序列。
然后将零个月添加到这个数字(显然是用来将月份序列转换回表示当前月份开始的日期),给我们一个月初日期。
然后,它获得从零日到月初日期之间经过的完整周数,从而给出一周序列。
然后,将周序列转换回表示周开始日期的日期,该日期表示在月初日期或之前的星期一。
然后,它以周为单位获取星期一或之前日期与当前日期前一天之间的差值,并加1(因此,该月的第一周表示为第1周)。
这听起来像是一个合理的算法,但如果没有测试和检查中间值,或者除非您从权威来源找到它,否则我不会支持它。
https://stackoverflow.com/questions/56205858
复制相似问题