我要从日期中提取以下内容:
周数 天数
我周的开始日期是星期一。
例如日期为:'2019年5月1日'或'2019-05-01'
然后
周数= 1 天数= 3
因为这一天是2019年5月1日,星期三。
我正在使用MS SQL Server 2012。 并使用以下来自net的代码获取周号。 我从中得到了周数,但我不知道它实际上在做什么。
function myFunction() {
var ptrn = new RegExp("u?", "gim");
var match;
var i = 0;
while ((match = ptrn.exec("color colour")) != null) {
console.log(JSON.stringify(match));
if (match.index == ptrn.lastIndex) {
ptrn.lastIndex++;
}
}
}
myFunction()
任何人都可以向我解释一下,并告诉我如何提取天数。
答案 0 :(得分:0)
此选择将为您提供@date
星期几(1:星期一,7:星期日),而不管您的@@ DATEFIRST集MS Doc:
select (DATEPART(DW, @date) + @@DATEFIRST + 5) % 7 + 1 as [Day of Week]
答案 1 :(得分:0)
如果您设置datefirst
,则只需执行以下操作:
set datefirst 1; -- "1" = "Monday"
select datepart(week, getdate()), datepart(weekday, getdate())
答案 2 :(得分:0)
其他人提到了如何获取星期几。
关于获取每周的代码:
select datediff(week, dateadd(week, datediff(week, 0, dateadd(month, datediff(month, 0, @date), 0)), 0), @date - 1) + 1
在我看来,似乎可以得到从零日到当前日期之间经过的整月数,这给了我们一个月序列号。
然后向该数字添加零个月(显然是用来将月份序列转换回代表当前月份开始的日期),从而为我们提供了月份开始的日期。
然后它获取从零天到月初的日期之间经过的整周数,从而为我们提供了一个星期序列号。
然后,将周序号回播到代表周初日期的日期,该日期代表月初日期之前或之前的星期一。
然后它获得上周一或先前日期与当前日期之前的日期之间的差(以周为单位),并将其相加1(以使该月的第一周表示为第1周)。 / p>
这听起来像是一个合理的算法,但是如果不测试和检查中间值,或者除非您从权威来源找到它,否则我不会认可它。
答案 3 :(得分:0)
检查此-
SELECT ISNULL(NULLIF(DATEPART(DW,GETDATE())-1,0),7)
答案 4 :(得分:0)
我已根据您的需要构造了查询。很好。
注意:将周日视为一周的第一天,将周六视为一周的第七天
DECLARE @dt datetime='2019-05-01'
DECLARE @Weekday INT
if(((DATEPART(DW, @dt) + @@DATEFIRST + 5) % 7 +2) =8)
SET @Weekday =1
else
SET @Weekday = ((DATEPART(DW, @dt) + @@DATEFIRST + 5) % 7 +2)
select DATEPART(week, @dt)- DATEPART(week, CONVERT(CHAR(6), @dt, 112)+'01')+ 1 AS [Week Number], @Weekday AS [Day of Week]