zoukankan      html  css  js  c++  java
  • tsql 与时间(周)相关的一些操作

    这篇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
  • 相关阅读:
    判断闰年
    CaesarCode
    substring
    configure: error: Cannot use an external APR with the bundled APR-util
    字符串处理487-3279
    git分支管理
    git解决冲突
    git 分支的创建和切换
    nginx与php-fpm原理
    git 远程仓库与本地项目关联
  • 原文地址:https://www.cnblogs.com/fgynew/p/1818460.html
Copyright © 2011-2022 走看看