判断某一天是否属于本周~~,周日会判断不准

mmcgzs 2012-08-21 09:26:51
比如下面

set datefirst 1 --设置周一为每周的第一天
select datediff(wk,'2012-8-19',getdate()) --判断今天和上周是是否属于同一周

返回0,何解??
...全文
164 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
renolit 2012-08-21
  • 打赏
  • 举报
回复
select datename(week,'2012-08-21') --今天是今年的第几周
select datename(weekday,'2012-08-21') --今天是周几
mmcgzs 2012-08-21
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]
引用楼主 的回复:
比如下面

set datefirst 1 --设置周一为每周的第一天
select datediff(wk,'2012-8-19',getdate()) --判断今天和上周是是否属于同一周

返回0,何解??

原因是你执行set datefirst 1之后是sql server把最后结果给你转化为以1为开始的形式,但是你直接执行datediff(wk,'20……
[/Quote]

如何修改 datediff 内部的周一的设置?
孤独加百列 2012-08-21
  • 打赏
  • 举报
回复
[Quote=引用楼主 的回复:]
比如下面

set datefirst 1 --设置周一为每周的第一天
select datediff(wk,'2012-8-19',getdate()) --判断今天和上周是是否属于同一周

返回0,何解??
[/Quote]
原因是你执行set datefirst 1之后是sql server把最后结果给你转化为以1为开始的形式,但是你直接执行datediff(wk,'2012-8-19',getdate())它内部还是以周日为每周开始,所以语句内取到的都是35周,所以结果是0.如果你把语句分开执行datepart(wk,getdate()) - datepart(wk,'2012-08-19')是先把每个函数的结果转化为以1为开始的形式在进行减的操作就可以得出1的结果了。
wobuainiyes 2012-08-21
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

datediff 返回两个日期的差
19号到今天才2天,当然不够一周了,所以是0了
[/Quote]

原来是这样,学写了
mmcgzs 2012-08-21
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]
datediff 返回两个日期的差
19号到今天才2天,当然不够一周了,所以是0了
[/Quote]

我用的参数是 wk,这和差几天没关系
比如下面两个日期,差一天,就返回1啊

select datediff(wk,'2012-8-18','2012-8-19')
以学习为目的 2012-08-21
  • 打赏
  • 举报
回复

set datefirst 1 --设置周一为每周的第一天
select datepart(wk,getdate())-DATEPART(wk,'2012-8-19')
--先取今天的周数和2012-08-19的周数再做减法
select datediff(wk,'2012-8-19',getdate())--datediff计算的是跨度
zhangyangziwo 2012-08-21
  • 打赏
  • 举报
回复
'2012-08-19' 和getdate()即'2012-08-21'
在一周内,所以是0
筱筱澄 2012-08-21
  • 打赏
  • 举报
回复
datediff 返回两个日期的差
19号到今天才2天,当然不够一周了,所以是0了
筱筱澄 2012-08-21
  • 打赏
  • 举报
回复
set datefirst 1 --设置周一为每周的第一天
select datepart(wk,getdate())-DATEPART(wk,'2012-8-19')

34,838

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧