SQL Server:获取下周的相对日期. (下周一,周二,周三……)

前端之家收集整理的这篇文章主要介绍了SQL Server:获取下周的相对日期. (下周一,周二,周三……)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我需要的是在今天的日期之后的下一个特定日期(星期一,星期二,星期三……)的日期.

允许用户选择他们想要的日期,并将其作为int存储在表中. “下周二给我打电话(3)”

Sunday = 1
Monday = 2
Tuesday = 3
...

所以我的桌子看起来像这样.

UserID,NextDayID

我想出的是:

select dateadd(dd,(7 - datepart(dw,GETDATE()) + NextDayID ) % 7,getdate())

它似乎工作,并将返回今天的日期,如果你要求今天的任何一天,如果需要我可以添加一周.

我想知道的是,这是一个很好的解决方案还是我缺少的东西?

解决方法

1)您的解决方案使用非确定性函数:datepart(dw …).由于这个方面,更改DATEFIRST设置将产生不同的结果.例如,你应该尝试:
SET DATEFIRST 7;
your solution;

接着

SET DATEFIRST 1;
your solution;

2)以下解决方案独立于DATEFIRST / LANGUAGE设置:

DECLARE @NextDayID INT  = 0 -- 0=Mon,1=Tue,2 = Wed,...,5=Sat,6=Sun
SELECT DATEADD(DAY,(DATEDIFF(DAY,@NextDayID,GETDATE()) / 7) * 7 + 7,@NextDayID) AS NextDay

结果:

NextDay
-----------------------
2013-09-23 00:00:00.000

解决方案基于DATETIME类型的以下属性

>第0天= 19000101 =周一
>第1天= 19000102 =星期二
>第2天= 19000103 =周三

>第5天= 19000106 =周六
>第6天= 19000107 =太阳

因此,将INT值0转换为DATETIME会得到19000101.

如果你想在下周三找到,那么你应该从第2天(19000103 /周三)开始,计算第2天和当天(20130921; 41534天)之间的天数,除以7(以获得整周数; 5933周数,多次乘以7(41531次;为了得到天数 – 从第一个星期三/ 19000103到最后一个星期三之间的整周),然后再加7天(一周; 41538天;为了得到星期三) ).将此号码(41538天)添加到开始日期:19000103.

注意:我目前的日期是20130921.

编辑#1:

DECLARE @NextDayID INT;
SET @NextDayID = 1; -- Next Sunday
SELECT DATEADD(DAY,((@NextDayID + 5) % 7),((@NextDayID + 5) % 7)) AS NextDay

结果:

NextDay
-----------------------
2013-09-29 00:00:00.000

注意:我目前的日期是20130923.

猜你在找的MsSQL相关文章