请问Microsoft outlook 里面某年的第一周起始日期是怎么计算的?谢谢. 请问Microsoft outlook 里面某年的第一周起始日期是怎么计算的?能给个算法吗? 谢谢. 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 :) 心中的CPU不够, 算不出来. 如果一周的第一天设定为周日如下计算的是某一年的第一个周一是多少号declare @cyear varchar (100)set @cyear='2007-01-01'select dateadd(dd,8,dateadd(dd,-datepart(dw,@cyear),@cyear)),datepart(ww,@cyear) 我指的是Microsoft outlook 里面某年的第一周起始日期的计算方法,假如outlook的周起始设定为星期一.2008年的第一周却是从2007年的12月31号开始的, (参见outlook的日历)所以现在想知道里面某年的第一周起始日期是不是有一定的方法? 明白你的意思了dateadd(dd,-datepart(dw,'2008')+2,'2008')以下是测试用例和代码2007年-2019年,假如outlook的周起始设定为星期一.测试结果如下----------------------------------------2007: 2007-01-012008: 2007-12-312009: 2008-12-292010: 2009-12-282011: 2010-12-272012: 2012-01-022013: 2012-12-312014: 2013-12-302015: 2014-12-292016: 2015-12-282017: 2017-01-022018: 2018-01-012019: 2018-12-31-----------------------------------declare @cyear varchar (100)set @cyear='2007'declare @theyear int;set @theyear =convert(int,@cyear)while @theyear<2020beginset @cyear=convert(varchar(100),@theyear)print @cyear + ': ' +convert(varchar(10),dateadd(dd,-datepart(dw,@cyear)+2,@cyear),120);set @theyear=@theyear+1end vieri_ch(尘雨-自在飞花轻似梦,无边丝雨细如愁):请问你的算法是?从你的测试数据来看, 从2007 -- 2011 都是对的, 但是2012年的第一个星期是从2011-12-26日开始的(outlook), 跟你的测得的2012: 2012-01-02 有出入, 可否说一下你的算法, 谢了. :) 我先按照规则修正算法,再给你讲述算法set datefirst 1 --设置数据库系统的一周的第一天是星期一dateadd(dd,-datepart(dw,'2008')+1,'2008') 测试结果2007: 2007-01-012008: 2007-12-312009: 2008-12-292010: 2009-12-282011: 2010-12-272012: 2011-12-262013: 2012-12-312014: 2013-12-302015: 2014-12-292016: 2015-12-282017: 2016-12-262018: 2018-01-012019: 2018-12-31SET DATEFIRST 1DECLARE @CYEAR VARCHAR (100)SET @CYEAR='2007'DECLARE @THEYEAR INT;SET @THEYEAR =CONVERT(INT,@CYEAR)WHILE @THEYEAR<2020BEGIN SET @CYEAR=CONVERT(VARCHAR(100),@THEYEAR) PRINT @CYEAR + ': ' +CONVERT(VARCHAR(10),DATEADD(DD,-DATEPART(DW,@CYEAR)+1,@CYEAR),120); SET @THEYEAR=@THEYEAR+1END 我把你的算法规则,用我的说法就是,先找到每年一月一日是星期几,接着找到那个星期的星期一,这个一月一日的日期减去星期数字就可以得到星期一是几月几号。理论上你的要求,不可能持出现当年第一周的星期一是比一月一日还晚sql server默认星期日为周的第一天,这个设置会影响到datepart(dw,'某年的一月一日')返回值set datefirst 1 --周一为第一天select datepart(dw,'2012')返回7星期 数字1 星期一2 星期二3 星期三4 星期四5 星期五6 星期六7 星期日set datefirst 7 --周日为第一天select datepart(dw,'2012')返回1星期 数字1 星期日2 星期一3 星期二4 星期三5 星期四6 星期五7 星期六要得到一月一日是星期几datepart(dw,'2012')我们看到是星期日如果星期一是第一天,他的值是7,那么该周星期一,应该用一月一日减去6天得到-7+1dateadd(dd,-7+1,'2012')='2011-12-26'完整的写法就是dateadd(dd,-datepart(dw,'2012')+1,'2012')如果星期日是第一天,他的值是1,那么该周星期一,应该用一月一日减去0天得到-1+1如果某年的一月一号是星期几,那么减去星期数字,再加上一个修正数字1就得到该周的星期一dateadd(dd,-1+1,'2012')='2012-01-01'完整的写法就是dateadd(dd,-datepart(dw,'2012')+1,'2012') 公式每年的第一天减去每年第一天的星期数字得到第一周的星期一是某年某月某日简单来说就是这样,只是因为周日,周一的问题,所以要首先设置set datefirst n然后再加上一个修正数字就可以了 谢谢vieri_ch详细的讲解. :) SQL按数据表实际存储位置的行号删除行,怎么做? 求汇总SQL语句,急!急! 如何把logo显示在网页上 很难的问题,如何让存储过程用windows计划任务顺序执行 无法启动分布式事务 数据表取值,有点难度 数据库比对,生成升级脚本的工具。 装了SQL Server,服务管理器无法启动 有关多对多关系的表的关联,可以吗? 请教批量同步数据 存图片的相对路径,数据类型应该是什么? 数据库 insert 问题
如下计算的是某一年的第一个周一是多少号declare @cyear varchar (100)
set @cyear='2007-01-01'select dateadd(dd,8,dateadd(dd,-datepart(dw,@cyear),@cyear))
,datepart(ww,@cyear)
2008年的第一周却是从2007年的12月31号开始的, (参见outlook的日历)
所以现在想知道里面某年的第一周起始日期是不是有一定的方法?
dateadd(dd,-datepart(dw,'2008')+2,'2008')以下是测试用例和代码2007年-2019年,假如outlook的周起始设定为星期一.
测试结果如下
----------------------------------------
2007: 2007-01-01
2008: 2007-12-31
2009: 2008-12-29
2010: 2009-12-28
2011: 2010-12-27
2012: 2012-01-02
2013: 2012-12-31
2014: 2013-12-30
2015: 2014-12-29
2016: 2015-12-28
2017: 2017-01-02
2018: 2018-01-01
2019: 2018-12-31
-----------------------------------declare @cyear varchar (100)
set @cyear='2007'
declare @theyear int;
set @theyear =convert(int,@cyear)
while @theyear<2020
beginset @cyear=convert(varchar(100),@theyear)
print @cyear + ': ' +convert(varchar(10),dateadd(dd,-datepart(dw,@cyear)+2,@cyear),120);
set @theyear=@theyear+1
end
请问你的算法是?
从你的测试数据来看, 从2007 -- 2011 都是对的, 但是2012年的第一个星期是从2011-12-26日开始的(outlook), 跟你的测得的2012: 2012-01-02 有出入, 可否说一下你的算法, 谢了. :)
set datefirst 1 --设置数据库系统的一周的第一天是星期一
dateadd(dd,-datepart(dw,'2008')+1,'2008') 测试结果
2007: 2007-01-01
2008: 2007-12-31
2009: 2008-12-29
2010: 2009-12-28
2011: 2010-12-27
2012: 2011-12-26
2013: 2012-12-31
2014: 2013-12-30
2015: 2014-12-29
2016: 2015-12-28
2017: 2016-12-26
2018: 2018-01-01
2019: 2018-12-31SET DATEFIRST 1
DECLARE @CYEAR VARCHAR (100)
SET @CYEAR='2007'
DECLARE @THEYEAR INT;
SET @THEYEAR =CONVERT(INT,@CYEAR)
WHILE @THEYEAR<2020
BEGIN
SET @CYEAR=CONVERT(VARCHAR(100),@THEYEAR)
PRINT @CYEAR + ': ' +CONVERT(VARCHAR(10),DATEADD(DD,-DATEPART(DW,@CYEAR)+1,@CYEAR),120);
SET @THEYEAR=@THEYEAR+1
END
先找到每年一月一日是星期几,
接着找到那个星期的星期一,
这个一月一日的日期减去星期数字就可以得到星期一是几月几号。理论上你的要求,不可能持出现当年第一周的星期一是比一月一日还晚sql server默认星期日为周的第一天,这个设置会影响到datepart(dw,'某年的一月一日')返回值set datefirst 1 --周一为第一天
select datepart(dw,'2012')
返回7
星期 数字
1 星期一
2 星期二
3 星期三
4 星期四
5 星期五
6 星期六
7 星期日set datefirst 7 --周日为第一天
select datepart(dw,'2012')
返回1
星期 数字
1 星期日
2 星期一
3 星期二
4 星期三
5 星期四
6 星期五
7 星期六要得到一月一日是星期几datepart(dw,'2012')我们看到是星期日
如果星期一是第一天,他的值是7,那么该周星期一,应该用一月一日减去6天得到-7+1
dateadd(dd,-7+1,'2012')='2011-12-26'
完整的写法就是dateadd(dd,-datepart(dw,'2012')+1,'2012')如果星期日是第一天,他的值是1,那么该周星期一,应该用一月一日减去0天得到-1+1
如果某年的一月一号是星期几,那么减去星期数字,再加上一个修正数字1就得到该周的星期一
dateadd(dd,-1+1,'2012')='2012-01-01'完整的写法就是dateadd(dd,-datepart(dw,'2012')+1,'2012')
set datefirst n
然后再加上一个修正数字就可以了