关于datepart计算weekday时多一天引起的问题及解决方法

使用datepart计算weekday时我们会发现默认sql server返回的数字总是比实际的数值大一,如:2012-12-18是星期二,使用
select datepart(WEEKDAY,'2012-12-18');
得到值总是3,这是由于sql server默认星期天作为一周的第一天引起的。有人简单指出在计算传值时只需要把当前日期减去一天就可以避免这个问题了,虽然这种方法很简单却有潜在的问题,例如:当我们计算某一天属于某一年的第几周时,会使用形如:
select datepart(week,@Day);
的方式进行查询,此时依然会存在以周日作为一周开始而引起的问题,如2013-1-6是2013年的第一个周的周日,使用
select datepart(WEEK,'2013-1-6');
计算得到的却是2,如果在日期上减去一天又会导致另一个问题,如2013-1-1分明是2013年的第一周,如果减去一天得到就成了53,因为减去一天就回到了2012-12-31,这一天属于2012年的第53周。
正确的处理方式还是要设置sql server以哪一天作为一周开始,这个设置是通过修改全局变量DATEFIRST来实现的,如果想要以周一作为一周的开始,可以通过:
set datefirst 1;
来实现,更详细的解释可以参考:
http://technet.microsoft.com/zh-cn/interopmigration/aa259210
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值