• 【SqlServer】MSSQL计算年月日周季度等相关信息


    定义变量

    set datefirst 7                         --设置一周中第一天为周天
    declare @dateNow datetime
    declare @dateCpr1 datetime
    declare @dateCpr2 datetime
    
    set @dateNow = getdate()                --当前日期(下文以 2021-07-28 09:04:59 为例)
    set @dateCpr1 = '2021-02-27 23:59:59'   --给定日期1
    set @dateCpr2 = '2021-07-27 10:26:00'   --给定日期2
    

    1、常用日期格式化字符串

    print CONVERT(varchar(100), @dateNow, 20)
    print CONVERT(varchar(100), @dateNow, 23)
    print CAST(@dateNow AS DATE)
    print CONVERT(varchar(100), @dateNow, 24)
    

    输出:

    2021-07-28 09:04:59
    2021-07-28
    2021-07-28
    09:04:59
    

    2、给定日期的年、月、日、小时、分钟、秒、毫秒、季度、一年中第几天、一年中第几周、一周中的第几天(周天为一周中第一天算起)

    print DatePart(yy,@dateNow)
    print DatePart(mm,@dateNow)
    print DatePart(dd,@dateNow)
    print DatePart(hh,@dateNow)
    print DatePart(mi,@dateNow)
    print DatePart(ss,@dateNow)
    print DatePart(ms,@dateNow)
    
    print DatePart(qq,@dateNow)
    print DatePart(dy,@dateNow)
    print DatePart(wk,@dateNow)
    print DatePart(dw,@dateNow)
    

    输出:

    2021
    7
    28
    9
    4
    59
    
    3
    209
    31
    4
    

    3、两个给定日期是否是同一天

    if(CONVERT(varchar(100), @dateCpr1, 23) = CONVERT(varchar(100), @dateCpr2, 23))
    	print 1;
    else
    	print 0;
    

    输出:

    0
    

    4、给定日期是否为今天

    if(CONVERT(varchar(100), @dateNow, 23) = CONVERT(varchar(100), @dateCpr1, 23))
    	print 1;
    else
    	print 0;
    

    输出:

    0
    

    5、日期2 是否早于 日期1

    if(@dateCpr1 > @dateCpr2)
    	print 1
    else
    	print 0
    

    输出:

    0
    

    6、日期2 是否晚于 日期1

    if(@dateCpr2 > @dateCpr1)
    	print 1
    else
    	print 0
    

    输出:

    0
    

    7、明天

    print CONVERT(varchar(100), @dateNow+1, 23)
    

    输出:

    2021-07-29
    

    8、昨天

    print CONVERT(varchar(100), @dateNow-1, 23)
    

    输出:

    2021-07-27
    

    9、给定日期的“当天”开始、中午、结束时间

    print CONVERT(varchar(100), @dateNow, 23) + ' 0:00:00.000'
    print CONVERT(varchar(100), @dateNow, 23) + ' 12:00:00.000'
    print CONVERT(varchar(100), @dateNow, 23) + ' 23:59:59.999'
    

    输出:

    2021-07-28 0:00:00.000
    2021-07-28 12:00:00.000
    2021-07-28 23:59:59.999
    

    10、给定日期所在“周”的开始、结束日期

    print DATEADD(DAY, 2 - DATEPART(WEEKDAY, @dateNow), CAST(@dateNow AS DATE))
    print DATEADD(DAY, 8 - DATEPART(WEEKDAY, @dateNow), CAST(@dateNow AS DATE))
    

    输出:

    2021-07-26
    2021-08-01
    

    11、给定日期所在“月”的开始、结束日期

    print DATEADD(DAY, 1, EOMONTH(@dateNow, -1))
    print EOMONTH (@dateNow)
    

    输出:

    2021-07-01
    2021-07-31
    

    12、给定日期所在“季度”的开始、结束日期

    print CAST(DATEADD(quarter, DATEDIFF(quarter, 0, @dateNow), 0) as DATE)
    print CAST(DATEADD (DAY, -1, DATEADD(quarter, DATEDIFF(quarter, 0, GETDATE()) +1, 0)) as DATE)
    

    输出:

    2021-07-01
    2021-09-30
    

    13、给定日期所在“年”的开始、结束日期

    print CAST(DATEADD(YEAR, DATEDIFF(YEAR, 0, @dateNow), 0)as DATE)
    print CAST(DATEADD(YEAR, DATEDIFF(YEAR, 0, GETDATE()) + 1, -1) as DATE)
    

    输出:

    2021-01-01
    2021-12-31
    

    14、给定日期所在月份共有多少天

    print DAY(EOMONTH(@dateNow))
    

    输出:

    31
    

    15、给定日期是当年的第几周

    print DATEPART(week, @dateNow)
    

    输出:

    31
    

    16、是否是工作日

    set @weekNo = datepart(weekday , @dateNow)
    if(@weekNo <> 1 and @weekNo <> 7)
    	print 1
    else
    	print 0
    

    输出:

    1
    

    17、是否是周未

    declare @weekNo int
    set @weekNo = datepart(weekday , @dateNow)
    if(@weekNo = 1 or @weekNo = 7)
    	print 1
    else
    	print 0
    

    输出:

    0
    

    18、获取给定日期所在月份的首周(若首周不完整,则向后取周)中指定周几的日期

    以2021年7月为例(“首周”为红框圈出的日期):
    image

    declare @whichWeekDay int  --周几(值域:[1,7],表示周一到周天)
    set @whichWeekDay =1
    
    declare @firstDayOfMonth datetime
    set @firstDayOfMonth = DATEADD(DAY, 1, EOMONTH(@dateNow, -1))
    print CAST(@firstDayOfMonth + (7 + @whichWeekDay + 1 - datepart(weekday, @firstDayOfMonth)) % 7 AS DATE)
    

    输出:

    2021-07-05
    
  • 相关阅读:
    61. Rotate List
    60. Permutation Sequence
    59. Spiral Matrix II ***
    58. Length of Last Word
    57. Insert Interval
    328. Odd Even Linked List
    237. Delete Node in a Linked List
    关于找List的中间Node
    234. Palindrome Linked List
    203. Remove Linked List Elements *
  • 原文地址:https://www.cnblogs.com/seanyan/p/15069637.html
Copyright © 2020-2023  润新知