• 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
  • 相关阅读:
    常用并发类
    线程基本知识
    java多线程基础
    volatile原理小结
    condition学习小结
    阻塞队列、线程池、异步
    Synchronized原理
    wait 和notify
    【Java 8 新特性】Java Comparator.comparing | 提取对象属性,按照指定规则排序
    在Centos8上配置Minio服务使用TLS
  • 原文地址:https://www.cnblogs.com/fgynew/p/1818460.html
Copyright © 2020-2023  润新知