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 =周一 … >第5天= 19000106 =周六 因此,将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. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |