获取实际是星期几

SQL 中有个datepart函数,datepart(weekday,getdate()) 可以返回现在是星期几,但它受set datefirst 选项的影响,实际是不准确的。

select @@datefirst 可以获取当前 set datefirst 的设置值,也就是每周的第一天是星期几。我的SQL Server里返回的是7,这是默认设置。也就是SQL Server把星期日当作每周的第一天。

如果今天是星期5,那么datepart(weekday,getdate()) 将返回6。

要解决以上问题,请使用以下公式,计算给定的日期实际是星期几。星期日用0表示。

(datepart(weekday,getdate())+@@datefirst-1)%7

附两个存储过程,返回给定日期到月末有几个星期6。

create proc getSaturdayCount(
@dt datetime
)
as
begin
    
declare @lastdateOfMonth datetime
    
--找出本月的最后一天
    set @lastdateOfMonth=dateadd(day,-1,convert(char(8),dateadd(month,1,@dt),120)+'1')
    
--先计算出最近的周六到月末的天数,再除以7加上1,得有几个星期六
    return (datediff(dd,@dt,@lastdateOfMonth)-(6-(datepart(weekday,@dt)+@@datefirst-1)%7))/7+1
end

--test
declare @r int
exec @r=getSaturdayCount '2007-7-1'
print @r

 

create proc getSaturdayCount(
@dt datetime
)
as
begin
    
declare @lastdateOfMonth datetime
    
declare @t table(dt datetime)
    
--找出本月的最后一天
    set @lastdateOfMonth=dateadd(day,-1,convert(char(8),dateadd(month,1,@dt),120)+'1')
    
--找出下一个星期6
    set @dt=dateadd(dd,(6-(datepart(weekday,@dt)+@@datefirst-1)%7),@dt)
    
while @dt<@lastdateOfMonth
    
begin
        
insert @t values(@dt)
        
set @dt=dateadd(dd,7,@dt)
    
end
    
select * from @t
end

--test
exec getSaturdayCount '2007-7-1'
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值