文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>tsql 与时间(周)相关的一些操作

tsql 与时间(周)相关的一些操作

时间:2010-09-05  来源:冯小诺

这篇post写点与日期时间周操作有关的一些操作,也是对工作共用到的这些做一些总结。

sql server里面有个set datefirst的语句,用于设置一周的第一天。可选值为1到7。语法如下:

SET DATEFIRST { number | @number_var } 

其中number可以为数值1到7。@number_var可以为自定义的变量。如果set datefirst 1,那么每周的第一天是星期一;如果set datefirst 7,那么每周的第一天是星期日。可以写如下的代码来做个测试:

declare @st as int
set @st = 1

declare @t1 as datetime
set @t1 = '2010-09-05 00:00:00.000'

while @st <= 7
begin
        set datefirst @st
        print DATEPART(weekday, @t1)
        set @st= @st+1
end

datepart(weekday, @t1)返回的一个整数表示@t1星期几。以上的输出时7,6,5,4,3,2,1。

现在有如下需求,给一个时间,返回当前所在周的星期一和星期日两个时间。代码如下:

declare @st as int
set @st = 1

declare @t1 as datetime
set @t1 = '2010-09-05 00:00:00.000'

while @st <= 7
begin
        set datefirst @st
        
        select dateadd(dd, @st - datepart(dw, @t1), @t1) as weekStart, 
        dateadd(dd,  @st - datepart(dw, @t1) + 6 , @t1) as weekEnd
        
        set @st= @st+1
end

日期操作中,常常对星期用简写的形式表现出来,如果对于2010-9-5 来说是星期日,英语是SUNDAY,那么一般简写为SUN。现在假如在英语的环境里面,我想把星期用“星期” +“几”来表示,比如今天就是“星期日”。常用的是用case表达式,使用函数datename得到英语的星期名字,然后匹配,比如"monday"对应着“星期一”,。。。以此类推。一下提供一种方式,不适用case表达式:

declare @st as int
set @st = 1

declare @wks as nchar(30)
set @wks = N'星期一星期二星期三星期四星期五星期六星期日';

declare @t1 as datetime
set @t1 = '2010-09-05 00:00:00.000'

declare @loop as int
set @loop = 1

while @loop <= 10
begin   
        select *, substring(@wks, isnull(nullif((@st+wd-1)%7, 0),7) * 3-2, 3)
        from(
        select @t1 as date, datepart(weekday, @t1) as wd, datename(weekday, @t1) wkn
        ) as P
        
        set @t1 = DATEADD(day, 1, @t1)
        set @loop = @loop + 1
end
相关阅读 更多 +
排行榜 更多 +
别惹神枪手安卓版

别惹神枪手安卓版

冒险解谜 下载
坦克战争世界

坦克战争世界

模拟经营 下载
丛林反击战

丛林反击战

飞行射击 下载