是否有可能设置一周的开始了T-SQL DATEDIFF功能?
题
我使用 DATEDIFF 功能来筛选记录仅上星期增加:
DATEDIFF(week, DateCreated, GETDATE()) = 0
和我注意到什么它假设上周日开始一周什么。但在我的情况下,我宁愿设置每周星期一开始。是否有可能以某种方式在T-SQL?
谢谢!
<强>更新强>
下面是表示什么DATEDIFF不检查 @@ DATEFIRST 一例一>变量,所以我需要另一解决方案。
SET DATEFIRST 1;
SELECT
DateCreated,
DATEDIFF(week, DateCreated, CAST('20090725' AS DATETIME)) AS D25,
DATEDIFF(week, DateCreated, CAST('20090726' AS DATETIME)) AS D26
FROM
(
SELECT CAST('20090724' AS DATETIME) AS DateCreated
UNION
SELECT CAST('20090725' AS DATETIME) AS DateCreated
) AS T
输出:
DateCreated D25 D26
----------------------- ----------- -----------
2009-07-24 00:00:00.000 0 1
2009-07-25 00:00:00.000 0 1
(2 row(s) affected)
2009年7月26日是星期天,我想在DATEDIFF第三列返回0太。
解决方案
是能够
SET DATEFIRST 1; -- Monday
这 http://msdn.microsoft.com/en-us/library /ms181598.aspx
似乎DATEDIFF不尊重DATEFIRST,所以使它做这样的运行它
create table #testDates (id int identity(1,1), dateAdded datetime)
insert into #testDates values ('2009-07-09 15:41:39.510') -- thu
insert into #testDates values ('2009-07-06 15:41:39.510') -- mon
insert into #testDates values ('2009-07-05 15:41:39.510') -- sun
insert into #testDates values ('2009-07-04 15:41:39.510') -- sat
SET DATEFIRST 7 -- Sunday (Default
select * from #testdates where datediff(ww, DATEADD(dd,-@@datefirst,dateadded), DATEADD(dd,-@@datefirst,getdate())) = 0
SET DATEFIRST 1 -- Monday
select * from #testdates where datediff(ww, DATEADD(dd,-@@datefirst,dateadded), DATEADD(dd,-@@datefirst,getdate())) = 0
这
被盗其他提示
我有另一种解决方案。 这应该是比较容易理解,纠正我,如果我错了
SET DATEFIRST 1
select DATEDIFF(week, 0, DATEADD(day, -@@DATEFIRST, '2018-04-15 00:00:00.000'))
我们从日期减去“-1”和周日将成为周六(这是一周的7nth日) 和Mondфy(2)将一周的第一天
不隶属于 StackOverflow